NS3网络模拟器中如何利用Gnuplot工具像MATLAB一样绘制各类图形?

NS3网络模拟器中如何利用Gnuplot工具像MATLAB一样绘制各种图形?

文章目录

1. 简介

Gnuplot是一个强大的命令行驱动的绘图工具,由Colin Kelly和Thomas Williams于1986年开始开发,支持二维和三维图形绘制。
特点:

  • 多平台支持:适用于Linux、OS/2、MS Windows、OSX、VMS以及许多其他平台。
  • 交互式与批处理模式:既可以通过命令行交互地输入指令进行绘图,也可以编写脚本批量生成图形,方便自动化处理。
  • 丰富的图形类型:支持多种2D和3D图形,如折线图、散点图、柱状图、曲面图等,还支持参数方程绘图、极坐标绘图等。
  • 数据格式灵活:可以直接读取包含数据的文本文件,数据文件中的数据应按照列排列,列之间用空格或制表符分隔,注释行以"#"开头会被忽略。
  • 可定制性强:用户可以通过设置各种参数来定制图形的外观,包括坐标轴范围、标签、刻度、线条样式、颜色、字体等。
  • 输出格式多样:支持多种输出格式,如PNG、JPEG、EPS、PDF、SVG等,方便在不同场合使用。

2. 基本用法

  • 基础绘图 :例如绘制正弦函数图像,在命令行中输入plot sin(x)即可。还可以通过添加更多参数来定制图形,如set title

    "Some math functions" // 设置图片标题、set xrange -10:10 // 设置横坐标范围等。

  • 从数据文件绘图 :假设有一个名为"fileA.dat"的数据文件,文件中第一列为x值,第二列为y值,可以使用plot "fileA.dat"

    using 1:2 title 'data A'来绘制该数据的折线图。

  • 绘制多条曲线 :在同一张图中绘制多条曲线时,可以使用逗号分隔不同的绘图语句,如plot sin(x) title 'Sine',

    cos(x) title 'Cosine'。

3.NS3绘图实例

以NS3中lr-wpan低速率个域网模型中的lr-wpan-error-distance-plot.cc为例,绘制性能曲线图。

1、 安装Gnuplot工具。

复制代码
sudo apt-get install gnuplot

2、 仿真代码中添加Gnuplot绘图相关代码。

首先,加入头文件:

复制代码
#include <ns3/gnuplot.h>

其次,创建plt文件和eps文件,其中eps文件用于存放记录数据,plt文件用于存放eps文件:

复制代码
std::ofstream berfile("802.15.4-psr-distance-sensi.plt");
Gnuplot psrplot = Gnuplot("802.15.4-psr-distance-sensi.eps");

然后,在仿真运行过程记录数据,如下代码所示,如果想绘制多条性能曲线,分开多个psrdataset记录,并分别AddDataSet到eps文件中即可:

复制代码
for(int k = 0; k<7; k++)
{
	Gnuplot2dDataset psrdataset(std::to_string(rxSensi[k]) + "dBm");
	for (int j = minDistance; j < maxDistance; j += increment)
	{
			//	记录数据
			psrdataset.Add(j, g_packetsReceived / 1000.0);
	}
	//将数据存入eps文件
	psrplot.AddDataset(psrdataset);
}

最后,将记录的所有数据加上标题、X轴、Y轴等信息写入plt文件。

复制代码
    psrplot.SetTerminal("postscript eps color enh \"Times-BoldItalic\"");
    psrplot.SetLegend("distance (m)", "Packet Success Rate (PSR)");
    psrplot.SetExtra("set xrange [0:200]\n\
                      set yrange [0:1]\n\
                      set grid\n\
                      set style line 1 linewidth 5\n\
                      set style increment user");
    psrplot.GenerateOutput(berfile);
    berfile.close();

3、通过Gnuplot工具将plt文件转为可查看的eps图片。

复制代码
gnuplot 802.15.4-psr-distance-sensi.plt

生成的eps文件通常在NS3的运行目录,如~/ns-allinone-3.38/ns-3.38/目录下,双击eps图片文件,即可查看:

如下图所示,绘制了不同接收灵敏度下,随着通信距离的增加,包接收成功率PSR的情况。由此也可知道不同接收灵敏度的最大通信距离。

相关推荐
sunshine22 girl22 分钟前
Java学习六 Java常见API-1-Radom随机数
java·开发语言·学习
可乐鸡翅yeah_26 分钟前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
潼心1412o42 分钟前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
夜晚回家1 小时前
Python 零基础入门 | 输入的数字为什么不能直接算
开发语言·python
时间的拾荒人1 小时前
Qt 事件机制全解析:从事件处理到事件过滤器
开发语言·qt·面试
于指尖飞舞1 小时前
java面试题总结
java·开发语言
zhangzeyuaaa3 小时前
深入理解 Ruby 运算符:本质、分类、坑点与重载实战
开发语言·前端·ruby
一木 之林3 小时前
DeepSeek Agent 开发(一)
开发语言·前端·javascript
朔北之忘 Clancy3 小时前
青少年软编等考七级题解目录
开发语言·c++·青少年编程·gesp·csp·信奥赛·noi
ss2733 小时前
AI全栈实战 | 3.2-01 Python 基础:四大数据容器怎么选,推导式为什么是 Pythonic 的灵魂
开发语言·人工智能·python