如何在 gnuplot 中绘制文本文件中的一些特定数据

How to plot some particular data from a text file in gnuplot

我有一个两列的 txt 文件,我将数据绘制如下

MyColor(n) = n==0 ? 0x008000  : n==1 ? 0xFF0000 : n==2 ? 0x000000 : 0xFF8C00
plot datafile u 1:2:(MyColor(column(-2))) w l  lw 1.0 lc rgb   var notitle

这给了我三种不同颜色的底部三行和相同颜色的其他行 (0xFF8C00),左图。但是我只想绘制最多 n==2 (图中只有三行)并且其他带有 0xFF8C00 的行不应该在图中并且对于每个 n (n==0 ? 0x008000 : n==1 ? 0xFF0000 : n==2 ? 0x000000) 我想要如右图所示用每种颜色标记名称。

如果我对你的问题的解释正确,我猜你正在寻找 indexlabel。检查 help indexhelp labeleveryindex.

可能有点混淆
  • every 允许选择由一个空行分隔的“块”。
  • index 允许选择由两个或多个空行分隔的“块”。

代码:

### plot only selected block
reset session

# create some test data
set print $Data
do for [i=1:7] {
    do for [j=1:100] {
        print sprintf("%.3f %.3f", j, sin(j/30.)+i*0.2 + 0.05*rand(0))
    }
    print ""; print ""    # two empty lines
}
set print

myColor(n) = n==0 ? 0x008000  : n==1 ? 0xFF0000 : n==2 ? 0x000000 : 0xFF8C00

set label 1 "LA" at 40, 1.3 tc rgb myColor(0)
set label 2 "ZA" at 30, 1.4 tc rgb myColor(1)
set label 3 "TA" at 67, 1.5 tc rgb myColor(2)

plot $Data u 1:2:(myColor(column(-2))) index 0:2 w l lw 1.0 lc rgb var notitle
### end of code

结果: