颜色 x 轴或线取决于 y 值

Color x-axis or line depending on y-value

我有这样的数据:

0.0 23.5 1
0.1 12.2 1
0.2 15.0 3
0.3 34.4 4
0.4 37.1 4

第 3 列表示第 2 列的数据所属的类别。我想将第 2 列与第 1 列绘制为默认线图,并通过 x 轴的颜色(或图中某处与 x 轴平行的线)表示第 3 列中的类别。

总共有18个类别,我想将类别编码如下 1 ... 6 种红色 7 ... 12 种绿色 13 ... 18 种蓝色阴影

这是如何实现的?

可以使用 linecolor variablelinecolor palette z 结合预定义的调色板轻松地从第三列读取颜色信息。我不确定你想要 blue/green/red 的阴影,但一种可能的方法是从全色变为白色:

set palette defined (1 'red', 6.9 'white', 7 'green', 12.9 'white', 13 'blue', 18.9 'white')
set cbrange [1:19]

边界有意设置为 0.9,因此没有一点是真正的白色,但始终具有其原始颜色的色调。

您提供的数据只有 1 到 4,所以我创建了一些随机数据来覆盖整个颜色范围:

set samples 20
set table $DATA
plot '+' u 1:(rand(0)*30):(round(rand(0)*18)) w table
unset table

将线图与颜色信息相结合的一种方法是向线图中添加彩色点:

plot $DATA u 1:2 w l lc "black", '' u 1:2:3 w p pt 5 ps 5 lc pal z

据我所知,您需要一个折线图和一些带有某种颜色的水平线,具体取决于第 3 列中的值。 那么,为什么不绘制条形图呢?检查下面的示例,它可以适应您的特殊需要。

代码:

### apply shades of colors from a column
reset session

# create some test data
set print $Data
    do for [i=1:18] {
        print sprintf("%g %g %g", i/10., rand(0)*10+10, i)
    }
set print

set palette defined ( 0 "#aa0000", 1 "#ee0000", 1.99 "#ffaaaa", \
                      2 "#00aa00", 3 "#00ee00", 3.99 "#aaffaa", \
                      4 "#0000aa", 5 "#0000ee", 5.99 "#aaaaff" ) maxcolors 18

set style fill solid 1.0
set boxwidth 0.8 relative
set xtics out
set yrange[0:30]
set cbrange[1:18]
set cbtics ()
do for [i=1:18] {
    set cbtics add (sprintf("%g",i) i/18.*17+0.5)
}
set key noautotitle

plot $Data u 1:2:3 w boxes lc palette
### end of code

结果:

代码:(或者,底部有颜色条的折线图)

### apply shades of colors from a column
reset session

# create some test data
set print $Data
    do for [i=1:18] {
        print sprintf("%g %g %g", i/10., rand(0)*10+10, i)
    }
set print

set palette defined ( 0 "#aa0000", 1 "#ee0000", 1.99 "#ffaaaa", \
                      2 "#00aa00", 3 "#00ee00", 3.99 "#aaffaa", \
                      4 "#0000aa", 5 "#0000ee", 5.99 "#aaaaff" ) maxcolors 18

set style fill solid 1.0
set boxwidth 0.8 relative
set xtics out
set yrange[0:30]
set grid x,y
set cbrange[1:18]
set cbtics ()
do for [i=1:18] {
    set cbtics add (sprintf("%g",i) i/18.*17+0.5)
}
set key noautotitle

plot $Data u 1:2 w lp pt 7 lc "black", \
        '' u 1:(0.5):3 w boxes lc palette
### end of code

结果: