NS3网络模拟器中如何利用Gnuplot工具像MATLAB一样绘制各种图形?
文章目录
- 1. 简介
- 2. 基本用法
- 3.NS3绘图实例
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’。
NS3_25">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的情况。由此也可知道不同接收灵敏度的最大通信距离。