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

相关推荐
Tummer83632 分钟前
C#+WPF+prism+materialdesign创建工具主界面框架
开发语言·c#·wpf
九章云极AladdinEdu8 分钟前
GPU与NPU异构计算任务划分算法研究:基于强化学习的Transformer负载均衡实践
java·开发语言·人工智能·深度学习·测试工具·负载均衡·transformer
好吃的肘子30 分钟前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
ghost14332 分钟前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#
小白学大数据33 分钟前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
立秋678940 分钟前
用Python绘制梦幻星空
开发语言·python·pygame
明月看潮生1 小时前
青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块
开发语言·青少年编程·rust·编程与数学
后青春期的诗go1 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架
Matlab仿真实验室1 小时前
基于Matlab实现图像透明叠加程序
人工智能·计算机视觉·matlab
草莓熊Lotso2 小时前
【C语言字符函数和字符串函数(一)】--字符分类函数,字符转换函数,strlen,strcpy,strcat函数的使用和模拟实现
c语言·开发语言·经验分享·笔记·其他