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

news/2025/1/24 3:42:38/

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绘图实例

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

在这里插入图片描述


http://www.ppmy.cn/news/1565669.html

相关文章

靠右行驶数学建模分析(2014MCM美赛A题)

笔记 题目 要求分析&#xff1a; 比较规则的性能&#xff0c;分为light和heavy两种情况&#xff0c;性能指的是 a.流量与安全 b. 速度限制等分析左侧驾驶分析智能系统 论文 参考论文 两类规则分析 靠右行驶&#xff08;第一条&#xff09;2. 无限制&#xff08;去掉了第一条…

嵌入式知识点总结 C/C++ 专题提升(一)-关键字

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.C语言宏中"#“和"##"的用法 1.1.(#)字符串化操作符 1.2.(##)符号连接操作符 2.关键字volatile有什么含意?并举出三个不同的例子? 2.1.并行设备的硬件寄存…

网络安全 | 什么是正向代理和反向代理?

关注&#xff1a;CodingTechWork 引言 在现代网络架构中&#xff0c;代理服务器扮演着重要的角色。它们在客户端和服务器之间充当中介&#xff0c;帮助管理、保护和优化数据流。根据代理的工作方向和用途&#xff0c;代理服务器可分为正向代理和反向代理。本文将深入探讨这两种…

如何写出优秀的提示词?ChatGPT官方的六种方法

使用ChatGPT时&#xff0c;提示词&#xff08;Prompt&#xff09;的质量直接影响到生成结果的好坏。ChatGPT官方文档中提供了六种优化提示词的方法&#xff0c;这些方法能够帮助用户更好地利用ChatGPT&#xff0c;提升其生成内容的准确性和实用性。本文将结合中文习惯和新的示例…

消息队列篇--原理篇--RocketMQ和Kafka对比分析

RocketMQ和Kafka都是高性能、分布式的消息队列系统&#xff0c;广泛应用于大规模数据流处理和实时分析场景。然而&#xff0c;它们的设计哲学、架构特点和适用场景存在显著差异。以下是RocketMQ和Kafka的详细对比&#xff0c;帮助你根据具体需求选择最合适的技术。 1、架构设计…

Linux 切换到 Root 用户的方式及差异详解

在 Linux 系统中&#xff0c;切换到 root 用户进行管理和操作是常见需求。不同的切换方法会影响环境变量、工作目录以及加载的配置文件。本文将介绍几种常用的切换方式及它们的特点。 切换到 Root 用户的主要方式 1. sudo su 这是通过 sudo 提权后调用 su 切换到 root 用户的…

Vue3 中使用组合式API和依赖注入实现自定义公共方法

组合式API 1.在项目根目录 src 文件夹下创建文件夹 utils &#xff0c;创建 index.js 文件 2.抛出想要对外暴露的方法&#xff0c;以下是一个判断数据类型的方法 export function getType(params) {// 判断是否是基本类型let res typeof paramsif (res ! object) {return re…

MVCC在MySQL中实现无锁的原理

一&#xff1a;基础知识 我们知道MySQL是多线程并发处理任务的。MySQL使用了MVCC来实现事务并发的无锁机制。 而且我们还需要知道MySQL的四种隔离级别&#xff1a;读未提交&#xff0c;读已提交&#xff08;RC&#xff09;&#xff0c;可重复读&#xff08;RR&#xff09;&am…