我有以下样本数据:
col1 2 0 1 1
col2 1 1 0 0
col3 1 1 1 0
col4 1 1 2 1
col5 1 1 1 1
col6 2 0 1 1
col7 1 1 2 2
col8 1 1 2 1第四列和第五列是第二列和第三列的颜色代码。例如,我想要“1”表示绿色,2表示白色,0表示橙色。
下面是我试图绘制它的方法:
set key off
unset border
unset xtics
unset ytics
set style data histograms
set style histogram rowstacked
set boxwidth 1 relative
set style fill solid 1.0 border -1
set yrange [0:2]
set lmargin 0
set rmargin 0
set tmargin 0
set bmargin 0.1
set terminal pngcairo truecolor size 100,65
set output "/export/test.png"
set palette model RGB defined ( 0 'orange', 1 'green', 2 'white')
plot 'test.data' u 2 linecolor rgb "orange", '' u 3 linecolor rgb "green"以下是我在无法根据实际数据实现颜色的情况下得到的结果:
那么,如何使用数据文件中指定的实际颜色呢?
如果有人想知道,如果这背后的理性鼓励了你的努力;-):我试图画一个惠普刀片c7000底盘,使用颜色编码显示空的底盘槽,插槽与刀片的开关。第2栏和第3栏中的实际值表示叶片是全高(值2)还是半高叶片(值1)。在没有刀片的地方,它的值仍然是1,默认为半高.
更新
有了这个,我就能得到我的need...Anybody有一个更短的版本?
plot 'test.data' u ($5==0?$2:sqrt(-1)) linecolor rgb "orange",\
'' u ($5==1?$2:sqrt(-1)) linecolor rgb "green",\
'' u ($5==2?$2:sqrt(-1)) linecolor rgb "white",\
'' u ($4==0?$3:sqrt(-1)) linecolor rgb "orange",\
'' u ($4==1?$3:sqrt(-1)) linecolor rgb "green",\
'' u ($4==2?$3:sqrt(-1)) linecolor rgb "white"进一步完善
如何将编号添加到块中,如以下图像所示:

最新问题:
我注意到,有时彩色托盘的颜色是错误的,除非在托盘中定义的所有颜色都在数据中。例如,使用以下数据:
1 2 0 1 1
2 1 1 0 0
3 2 0 1 1
4 2 0 1 1
5 1 1 1 1
6 1 1 1 0
7 1 1 1 1
8 1 1 1 1你可以从第4-5号中看到,我只有‘绿色’(1)和‘有机’(0)。因为我没有空槽,所以我没有“白色”颜色。我得到了这张照片:

这个图像显然是不正确的,因为白色表示我有一个空槽。我期待着这张照片:

那么,颜色‘白色’和‘绿色’是如何被翻转的呢?我注意到,如果我将其中任何一个颜色代码更改为白色,那么彩色托盘将正确工作。
发布于 2016-12-07 08:00:28
我会使用boxxyerrorbars绘图风格。不管名字是什么,这是你应该使用的,当你想要绘制“不同”的盒子。
set key off
unset border
unset xtics
unset ytics
unset colorbox
set style fill solid 1.0 border -1
set palette model RGB defined ( 0 'orange', 1 'green', 2 'white')
set cbrange [0:2]
set style data boxxyerrorbars
plot 'test.data' u 0:(0.5*$2):(0.5):(0.5*$2):4 lc palette,\
'' u 0:($2 + 0.5*$3):(0.5):(0.5*$3):5 lc paletteboxxyerrorbars绘图样式本身包含四列( x、y、dx和dy ),lc palette使用第五列中的值来根据当前调色板确定颜色。为了在调色板绝对值中设置值,我还将cbrange设置为与调色板覆盖的范围相同的范围。
using 0:(0.5*$2):(0.5):(0.5*$2):4一词的意思是:
x-value (方框中心)y-value (方框中心)0.5为dx (框宽的一半)dy-value (框高的一半)对于第二个绘图部分,y-value是第二列中的值加上第三列中值的一半。

还可以轻松地编写此解决方案,以允许增加堆叠框的数量:
set palette model RGB defined ( 0 'orange', 1 'green', 2 'white')
set cbrange [0:2]
set style data boxxyerrorbars
last_column = 3
plot for [i=2:last_column] 'test.data' \
u 0:(0.5*column(i) + sum[c=2:(i-1)] column(c)):(0.5):(0.5*column(i)):(column(last_column + i - 1)) lc palette发布于 2016-12-06 22:46:41
颜色用于识别不同堆栈中相应的部分。因此,在属于同一直方图的所有堆栈中,它们必须遵循相同的顺序。
但是Gnuplot有一个newhistogram命令,之后颜色可以被“重置”。还有一个multiplot命令,它可以用来在循环中添加新的直方图。
下面是替换原始plot命令的脚本部分:
set style line 1 lt 1 lc rgb "white"
set style line 2 lt 1 lc rgb "green"
set style line 3 lt 1 lc rgb "orange"
stats 'test.data' u 2
n = STATS_records
set multiplot
do for [i=0:n-1] {
plot "test.data" u (0) ,\
newhistogram "" at i, "" every ::i::i u (style = $5 + 1, 0), \
"" every ::i::i u 2 ls style, \
"" every ::i::i u (style = $4 + 1, 0), \
"" every ::i::i u 3 ls style
}
unset multiplot这就是它的工作原理:
set style ...:定义将要使用的样式(颜色)。stats ...:查找行数。我们将为每一行绘制一个独立的直方图。set multiplot:我们会一次又一次地在同一地区进行策划。"test.data" u (0):什么都不画,只保留所有直方图的空间。new histogram "" at i:在x轴上初始化一个没有偏移量i的名称的新直方图。我们将在这个偏移量上绘制一个堆栈。"" every ::i::i:绘图行i。u (style = $5 + 1, 0):什么都不画,但是从文件中读取当前行的颜色。u 2 ls style:用以前读取的样式绘制当前行的第2列。我不知道这个版本是否比你的短:)

https://stackoverflow.com/questions/40986627
复制相似问题