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的情况。由此也可知道不同接收灵敏度的最大通信距离。

相关推荐
七七&5566 小时前
2024年08月13日 Go生态洞察:Go 1.23 发布与全面深度解读
开发语言·网络·golang
java坤坤6 小时前
GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚
开发语言·后端·golang
元清加油6 小时前
【Golang】:函数和包
服务器·开发语言·网络·后端·网络协议·golang
健康平安的活着7 小时前
java之 junit4单元测试Mockito的使用
java·开发语言·单元测试
念念01078 小时前
基于MATLAB多智能体强化学习的出租车资源配置优化系统设计与实现
大数据·人工智能·matlab
DjangoJason8 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq
m0_480502648 小时前
Rust 入门 KV存储HashMap (十七)
java·开发语言·rust
大阳1238 小时前
线程(基本概念和相关命令)
开发语言·数据结构·经验分享·算法·线程·学习经验
YA3339 小时前
java基础(九)sql基础及索引
java·开发语言·sql
奇树谦10 小时前
QT|windwos桌面端应用程序开发,当连接多个显示器的时候,如何获取屏幕编号?
开发语言·qt