首页 > 解决方案 > 具有颜色渐变的 gnuplot 直方图

问题描述

我试图用 2(下)和 3(上)绘制以下数据

数据:

Cl  5.1244    6.0975
Cl2 3.6397    5.0368
Cl3 4.9153    6.0568
Br  4.7905    5.2973
Br2 3.4454    4.3466
Br3 4.6047    5.2715
I   4.5664    4.6143
I2  3.3487    3.7660 
I3  4.4178    4.6079

代码:

set border 2
set yrange [1.5:8.5]
set style data histogram
set style histogram cluster gap 1
set style fill solid
#set palette defined (0 "white", 7.0 "red")
#set boxwidth 0.5
set xtics format ""

plot "CBM-VBM2.dat" using ($2):xtic(1), '' u 3

cbm-vbm-绘图

在此处输入图像描述

标签: gnuplothistogramgradient

解决方案


好吧,它并没有像我预期的那样冗长。查找附件关于如何创建渐变框的建议。为了得到一个好看的图形和淡入淡出,您可能需要调整一些变量,例如N子框的数量或“淡入淡出函数”,在这里sqrt(x)

代码:

### gradient boxes
reset session

$Data <<EOD
1   1L   5.45   3.90   0x000000
2   2L   5.00   4.00   0x008888
3   3L   4.90   4.10   0xff00ff
4   4L   4.80   4.12   0x0000ff
5   5L   4.75   4.15   0x00ff00
EOD

$Levels <<EOD
Ti         4.35
Cu         4.70
Ni         5.23
Pt         5.64
graphene   4.50
EOD

ColorFade(x) = sqrt(x)                 # function between [0:1][0:1] to fade out the color
BoxWidth  = 0.9                        # relative boxwidth
BoxHeight = 0.3                        # fade-box height
N = 21                                 # number of subbox steps
FadeDirection(col) = col==3 ? -1 : 1   # fading direction
BaseColor(n) = int(word($Data[n],5))   # base color

set print $FadeBoxes append
do for [a=1:|$Data|] {
    do for [col=3:4] {
        do for [i=0:N] {
            x0 = a
            y0 = -word($Data[a],col)
            ystep = real(BoxHeight)/N*FadeDirection(col)
            print sprintf("% 9g % 9g % 9g % 9g 0x%02x%06x", \
            x0-BoxWidth/2., x0+BoxWidth/2., \
            y0+i*ystep,       y0+(i+1)*ystep, \
            int(ColorFade(real(i)/N)*0xff),BaseColor(a))
        }
    }
}
set print

set style fill solid noborder
unset key
LevelXShift = 6

plot $FadeBoxes u 1:3:1:2:3:4:5 w boxxy fc rgb var ti "Levels", \
     $Data      u 1:(-$3):2 w labels offset 0, 0.7, \
     $Levels u ($0/2+LevelXShift):(-$2):1 w labels offset 0, 0.7, \
          '' u ($0/2+LevelXShift):(-$2):2 w labels offset 0,-0.7, \
          '' u ($0/2+LevelXShift-0.2):(-$2):(0.4):(0) w vec lc "red" lw 2 nohead
### end of code

结果:

在此处输入图像描述


推荐阅读