我有一个数据集,其名称为('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 值数量也不相同。
如果是常规的,例如每个块始终有 6 个值,您可以简单地使用plot for
and every
, check help plot for
and help every
。但在你的情况下这并不正常。
为了用不同的颜色绘制每个“块”,您必须告诉 gnuplot 块的结束位置。通常这是通过一个或多个空行来完成的。
不幸的是,块之间没有空行,因此您必须自己插入它们。通过外部工具或 gnuplot 本身(后者将需要几行额外的代码)。这里需要将数据存储在数据块中。如何将文件放入其中,请参阅(gnuplot:将数据文件 1:1 加载到数据块中 https://stackoverflow.com/q/54600172/7295599)
第二种方法(如果您想使用线点绘制)是使用点绘制两次,然后使用线条绘制两次,其中每次当前 x 值小于前一个值时颜色都会更改。为了在块之间进行分割,颜色设置为不可见(myLineC=-2
)。
如果你只想要线条,你可以简单地跳过情节with points
。
根据您的具体需求(颜色、键等),可能需要进一步微调。
Code:
### 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
Result:(两次结果相同)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)