如何解决如何使用Gnuplot在一张图中绘制代表多个数据集行的多个图的图表?
我有一个数据集,其名称为('output.txt'),格式如下:
1 ......
2 ......
4 .....
6 ......
7 .....
10 ......
1 ......
2 ......
5 .....
6 ......
7 .....
1 ......
3 ......
4 .....
6 ......
7 .....
10 ......
.
.
.
.
.
.
2 ......
4 .....
6 ......
7 .....
10 ......
我想在其自己的彩色图中绘制行的每个子集(直到我达到x + 1的值小于x的值),然后在一个图中绘制所有图。如何使用Gnuplot做到这一点?
解决方法
从不完整的示例数据来看,每个块的x值看起来不一样,甚至每个块的x值量也不一样。
如果正常,例如您可以简单地使用plot for
和every
并为help plot for
和help every
分别为每个块使用6个值。但这对您而言并不正常。
为了用不同的颜色绘制每个“块”,您必须告诉gnuplot块在哪里结束。通常,这是用一个或几个空行完成的。 不幸的是,您的块之间没有空线,因此您必须自己插入它们。通过外部工具或gnuplot本身(后者将花费一些额外的代码行)。这里有必要将数据放在一个数据块中。如何将文件放入其中,请参阅(gnuplot: load datafile 1:1 into datablock)
第二种方法(如果要使用线点绘制)将是用点绘制两次,用线绘制第二次,其中,当当前x值小于先前值时,每次更改颜色。为了在块之间进行拆分,将颜色设置为不可见(myLineC=-2
)。
如果只需要线条,则可以直接跳过图解with points
。
根据您的确切需求(颜色,键等),可能需要对其进行进一步的微调。
代码:
### split data based on x-values
reset session
$Data <<EOD
1 0.11
2 0.12
4 0.13
6 0.14
7 0.15
10 0.16
1 0.21
2 0.22
5 0.23
6 0.24
7 0.25
1 0.31
3 0.32
4 0.33
6 0.34
7 0.35
10 0.36
2 0.41
4 0.42
6 0.43
7 0.44
10 0.45
EOD
# first approach by inserting empty lines
set title "Approach 1"
set print $DataSplit
x0=NaN
do for [i=1:|$Data|] {
x1 = real(word($Data[i],1))
if (x1<x0) { print "\n" }
x0 = x1
print $Data[i]
}
set print
plot $DataSplit u 1:2:(column(-1)+1) w lp pt 7 lc var notitle,\
pause -1 "Press Enter to continue"
# second approach by setting the color invisible to split
set title "Approach 2"
myColor = 1
x0=NaN
plot $Data u ((x0>$1 ? (myColor=myColor+1,myLineC=-2) : myLineC=myColor),x0=$1):2:(myLineC) w l lc var notitle,\
tmp=(x0=NaN,myColor=1) $Data u (($1<x0 ? myColor=myColor+1 : 0),x0=$1):2:(myColor) w p pt 7 lc var notitle
### end of code
结果 :(两次相同的结果)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。