gnuplot分析图制作

一. gnuplot的安装(ubuntu16.04)

  1. apt-get install gnuplot
  2. apt-get install gnuplot-x11

二. 绘图板

1. 默认输出

默认gnuplot会将图像绘制到桌面系统的窗体中:
在这里插入图片描述
然后将其保存为其它格式:
在这里插入图片描述

2. 制定输出

也可自定义输出格式与输出文件名称,如下语句:

#启动gnuplot
gnuplot
#设置输出格式
set term jpeg
#设置输出文件名称
set output Luiz.jpg
#画一个正弦波
plot [-3.14:3.14] sin(x)

三. 基本操作

1. 指定数据源

gnuplot设计的目的是将数据可视化,因此必须提供有效的数据源,否则只能当作画图板来用了。可自己伪造一份数据:

1 35
2 20
3 17
4 89
5 69
6 54
7 45
8 45
9 32
10 21
11 35
12 20
13 17
14 89
15 69
16 54
17 45
18 45
19 32
20 21

将其命名为data.dat,然后在gnuplot中执行

plot 'data.dat'

sha
此时可生成一张离散数据分布图,很丑,因为是默认的。另外注意对于数据源不止两列,且分隔符不是控格的可采用选择性使用/指定分隔符的方式,否则gnuplot不认,如果上面的数据有三列,每列以逗号分开,而我们绘图只需取前两列作为x/y轴,那么可以:

plot 'data.dat' using 1:2 "%lf,%lf"
y(x) = 1 - x * x
z(x) = x
wn = 1.0
set xrange [0:1]
set samples 50
set dummy x
set key box
plot y(x),z(x)

也可利用函数公式,自动计算
在这里插入图片描述

2. 绘图控制

2.1. 线条控制

plot命令可以跟很多参数,格式如下:

plot  'data.dat' with lp lt 1 lc rgb "blue" lw 2

参数看起来有些古怪,其实很好记:
lp :linespoints 代表采用线+点的方式绘图
lt :linetype 指定线条类型为第一种
lc :linecolor 指定线条颜色为蓝色,以rgb颜色表示
lw:不用说了吧,线宽
补充:
w: with with子句指定样式
l: line 用线画
p: point 用点画
pt:pointtype pt 点的样式
ps:pspointsize 点的大小
t : 设置legency名称
其实还有很多调整参数,但是平时使用一般不会注意图像的美观,所以记住几个就ok,下面是优化后的绘图:
在这里插入图片描述
感觉线条太僵硬,那么可以采用平滑算法。但是一般不建议使用,会失真。下面这张图就是采用两种平滑算法后与原始图像的对比效果以及命令:

#隐含知识点:plot可同时绘制多条曲线 用逗号隔开分别设置绘图属性即可
#smooth bezier 指定为贝叶斯平滑,失真严重
#smooth csplines指定为样条线平滑
plot 'data.dat' with  lp lt 3 lc rgb "black" lw 1,\
'data.dat' with lp lt 2 lc rgb 'red'lw 2 smooth bezier, \
'data.dat' with lp lt 1 smooth csplines 

在这里插入图片描述

2.2. 图例控制(set命令)

以下均为set命令实现,若用户想清除已set的属性,可reset,也可以单独回退某一属性的设置:unset xxx

 set key left #放在左边,有left 和right两个选项
 set key bottom #放在下边,只有这一个选项;默认在上边
 set key outside #放在里边
 unset key #不显示图例
 #以上三个选项可以进行组合。如:
 set key left top #表示左下边
 #注意图例名称只能在plot时指定,而不能通过set命令指定例如:
 plot 'data.dat' using 1:2 "%lf,%lf" t "haha"
 replot

在这里插入图片描述

2.3. 坐标轴控制

 set title "luiz's chart"   #设置绘图名称
 set xlabel "luiz-x"  #x轴标为luiz-x,同样可以为y轴定义ylabel 
 set xtics 5.0    #x轴的主刻度的宽度为5.0,同样可以为y轴定义ytics
 set xtics 1 ,0.5 ,1   #另一种形式,分别指定最小、最大主刻度,以及刻度步长
 set mxtics 4    #x轴上每个主刻度中画4个分刻度,同样可以为y轴定义mytics
 set xtics nomirror #去掉上边x的刻度,同样可以为y轴定义ytics 
 set format y ""  #设置y轴数据格式,这里是清空
 set grid    #开启网格

在这里插入图片描述

2.4. 辅助控制

为了突出重点有时需在图中加文字说明或者符号,可:

 set label ‘focus here’ at 6.888,45.487   #在坐标(6.888,45.487)处加入字符串focus here
 set  key box    #把图例用框框起来
 set arrow from 5,50 rto 6.8,45  #放置一个箭头指向该符号

在这里插入图片描述

3. 中文支持

我在gnuplot命令行下无法输入中文,因此转换思路,将命令写入文件,在gnuplot中读取该文件
文件trick.lpg内容:

set label "卢平光" at 10,30

gnuplot中:

load "trick.lpg"
replot

窗口可正确显示:
在这里插入图片描述
但是,若将term指定为jpeg或者pdf却不能正确显示。这里前这样用吧,不再纠结了。

tips:
1.在gnuplot中若想退到shell中改下文件,可直接输入shell,完成编辑后输入exit就会切回gnuplot,前面的命令不会丢,很方便。
2. load方式提示我们,可以将gnuplot一些命令,尤其是个人习惯的绘图设置保存起来,下次进入gnuplot后直接load一次就可省去很多设置。

四. 高级操作

1. 数据计算

对于源数据,gnuplot可进行再次运算,例如可对原始数据做简单的加减乘除后再使用:

plot 'data.dat'  using 1:2 w lp lw 2 lc 3 pt 13 ps 2 title "original",\
'data.dat'  using 1:($2/3+10) w lp lw 2 lc 1 pt 5 ps 2 title "modified"

$2 表示源数据的第二列数据,类似于shell变量的使用方式。
在这里插入图片描述

2. 双坐标绘图

某些情况下,需使用相同的x轴数据绘制两条不同的曲线,此时可以考虑,启用右侧y2纵向坐标,测试数据如下:

1 23 41
2 34 40
3 45 32
4 32 56
5 21 78
6 70 31
8 82 1 
9 54 5 
10 11 7
11 32 18
12 1  24
13 6  79
14 13 85
15 20 60
16 23 26
17 34 13
18 45 1
19 32 45
20 21 32
21 70 21
22 82 15
23 54 5
24 11 2
25 1  1
26 6  1
27 13 0
28 20 0
29 1  0
30 1  6
#分别使用y1、y2绘制两条折线
plot 'data.dat'  using 1:2 w lp lw 2 lc 3 pt 13 ps 2 title "X1Y1" axis x1y1,\
'data.dat'  using 1:($2/3+10) w lp lw 2 lc 1 pt 5 ps 2 title "X1Y2" axis x1y2
#set y2tics 不为y1tics的镜像
set y2tics nomirror
#使能y2tics
set y2tics

在这里插入图片描述
可以看到,右侧y2轴用于第二条曲线纵坐标轴了。但是还有一点,那就是栅格与y2不对齐,因为y1/y2两侧的刻度数量不一致,因此只能对其其中一个。解决的办法自然是,调整两个轴的刻度数量相同

set y2range [-20:130]
replot

在这里插入图片描述

2. 多图平铺

#进入多图模式,并设置布局为1*2
set multiplot layout 1,2
plot sin(x)
plot cos(y)

在这里插入图片描述

3. 添加几何图像

可以往图框中添加一些必要的图形,来强调局部细节,gnuplot支持多种几何图形的绘制,包括:arrow(箭头)、rectangle(长方形),ellipse(椭圆形),circle(圆形) 和polygon(多边形)

#分别指定起始结束位置、箭头属性(empty、filled、nofilled)、箭头大小,角度等信息
set arrow form 15,99 to 14,86 empty size 0.5,15,60
#去掉箭头后,就是直线,也可设置为双向箭头
set arrow form 15,99 to 14,86 filled size 0.5,15,60 nohead
set arrow form 16,99 to 15,86 filled size 0.5,15,60 backhead
set arrow form 17,99 to 16,86 filled size 0.5,15,60 heads

注意: 任何添加的图形(包括label)都是有编号的,例如上面添加的4个arrow是按照顺序分别编号的(0-3),可依次删除:
unset arrow 3
在这里插入图片描述

#以10,80为中心点绘制矩形1,以12,75为中心点绘制矩形2,且在底层
unset object 1
set object 1 rectangle at 10,80 size 5,10 lw 2
set object 2 rectangle at 12,70 size 5,10 lw 1 behind

在这里插入图片描述

3. 绘制分布直方图

折线图表达变化趋势有优势,但是查看数据分布需要用到直方图,可通过如下命令来绘制:

#设置数据风格为直方图类型
set style data histogram
#设置直方图风格为两组数据紧邻排列,图形间隔为1倍图形大小
set style histogram clustered gap 1
#设置填充风格为 实体、透明度0.4、有边缘线
set style fill solid 0.4 border
#分别使用2,3列数据绘制(注意直方图不用指定x)
plot "test.dat" using 2, '' using 3

在这里插入图片描述


#设置直方图风格为两组数据上下堆叠,形成一个直方图
set style histogram rowstacked
#设置柱状图宽度为刻度的50%
set style boxwidth 0.5 
#分别使用2,3列数据绘制(注意直方图不用指定x),xticlabels(1)表示使用第一列数据作为x标注名称
set xtics rotate by -45

在这里插入图片描述

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值