如何使用Gnuplot在一个绘图中绘制表示数据集中多个子集行的多个图表?

如何使用Gnuplot在一个绘图中绘制表示数据集中多个子集行的多个图表?,gnuplot,Gnuplot,我有一个数据集,其名称为('output.txt'),格式如下: 1 ...... 2 ...... 4 ..... 6 ...... 7 ..... 10 ...... 1 ...... 2 ...... 5 ..... 6 ...... 7 ..... 1 ...... 3 ...... 4 ..... 6 ...

我有一个数据集,其名称为('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
every
,检查
help plot for
help every
。但这在你的情况下并不常见

为了用不同的颜色绘制每个“块”,您必须告诉gnuplot块的结束位置。通常这是通过一个或几个空行来完成的。 不幸的是,块之间没有空行,所以必须自己插入。通过外部工具或gnuplot本身(后者需要额外几行代码)。这里有必要将数据保存在数据块中。如何将文件放入其中,请参见()

第二种方法(如果要使用linespoints打印)是使用点打印两次,然后使用线打印第二次,当当前x值小于上一个值时,每次都会更改颜色。为了在块之间进行分割,颜色设置为不可见(
myLineC=-2
)。 如果只需要直线,只需跳过带有点的绘图
。
根据您的具体需要(颜色、钥匙等),可能需要进一步微调

代码:

### 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
###基于x值分割数据
重置会话

$Data您能澄清一下“数据报”这个词的用法吗?不清楚您的目标是什么样的图。*图(带线图),对不起,谢谢您通知我。点是什么?它们是数字吗?在此结构中,其中是x轴值,其中是您希望程序绘制的y轴值?是的,y是数字。我现在对y是什么不感兴趣,所以我隐藏了y数据来集中说明x不是正则的事实。我实现了一个网络模拟器,x值表示网络何时成为随机运行和停止。我做了一个实验,用不同的参数重复了很多次,然后把结果放在一个文件中。