Gnuplot:绘制具有可变点类型的点

时间:2014-05-17 05:37:19

标签: gnuplot

我在前2列中有点的x,y值,以及在一列数据文件中指示3.列中的点类型(符号)的数字。如何使用不同的符号绘制数据点?

2 个答案:

答案 0 :(得分:4)

不幸的是,没有办法(AFAIK)使用vanilla GNUPLOT从列值自动设置绘图点。

但是,有一种方法可以通过为每个数据系列设置线型来解决这个问题,然后根据定义的样式绘制值:

set style line 1 lc rgb 'red' pt 7 #Circle
set style line 2 lc rgb 'blue' pt 5 #Square 

请记住,pt之后的数字是点类型。

然后,您所要做的就是绘图(假设" data.txt"中的数据是按ColX ColY Col3排序的):

plot  "data.txt" using 1:2 title 'Y Axis' with points ls 1, \
"data.txt" using 1:3 title 'Y Axis' with points ls 2

Try it here使用此数据(标题为"数据" - 另请注意第3列和第34列;符号"使用时注明,它主要用于说明目的):

# This file is called   force.dat
# Force-Deflection data for a beam and a bar
# Deflection    Col-Force       Symbol 
0.000              0              5
0.001            104             5
0.002            202            7
0.003            298            7

在剧情剧本标题中:

set key inside bottom right
set xlabel 'Deflection (m)'
set ylabel 'Force (kN)'
set title 'Some Data'
set style line 1 lc rgb 'red' pt 7
set style line 2 lc rgb 'blue' pt 5
plot  "data.txt" using 1:2 title 'Col-Force' with points ls 1, \
"data.txt" using 1:3 title 'Beam-Force' with points ls 2

一个警告当然是您必须重新配置数据输入源。

参考文献:

http://www.gnuplotting.org/plotting-single-points/

http://www.gnuplotting.org/plotting-data/

答案 1 :(得分:0)

这是一个可行的解决方案(这是对gnuplot conditional plotting with if的简单推断),只要您没有数十个不同的符号要处理,该方法就可以工作。

假设我想在坐标系中绘制2D点。我只有两个符号,我在数据文件的最后一栏中随意用0和1表示:

0 -0.29450470209121704 1.2279523611068726 1 
1 -0.4006965458393097 1.0025811195373535 0 
2 -0.7109975814819336 0.9022682905197144 1 
3 -0.8540692329406738 1.0190201997756958 1 
4 -0.5559651851654053 0.7677079439163208 0 
5 -1.1831613779067993 1.5692367553710938 0 
6 -0.24254602193832397 0.8055955171585083 0 
7 -0.3412654995918274 0.6301406025886536 0 
8 -0.25005266070365906 0.7788659334182739 1 
9 -0.16853423416614532 0.09659398347139359 1 
10 0.169997438788414 0.3473801910877228 0 
11 -0.5252010226249695 -0.1398928463459015 0 
12 -0.17566296458244324 0.09505800902843475 1 

要实现我想要的,我只是使用条件图来绘制文件。使用1/0之类的未定义值将不会绘制给定点:

# Set styles
REG_PTS = 'pointtype 7 pointsize 1.5 linecolor rgb "purple"'
NET_PTS = 'pointtype 4 pointsize 1.5 linecolor rgb "blue"'
set grid

# Plot each category with its own style
plot "data_file" u 2:($4 == 0 ? $3 : 1/0) title "regular" @REG_PTS, \
     "data_file" u 2:($4 == 1 ? $3 : 1/0) title "network" @NET_PTS

这是结果:

result

希望这会有所帮助