我有一个像这样的数据文件:
PS 105 169 169 169 68 0 0 255 105 169 169 169 0 169 169 169 0 169 169 169 0 169 169 169
GMQ 43 0 255 0 39 0 0 255 40 34 139 34 105 169 169 169 105 169 169 169 0 169 169 169
GL 81 0 255 0 40 0 0 255 105 169 169 169 0 169 169 169 0 169 169 169 0 169 169 169
CM_{1} 105 169 169 169 47 0 0 255 105 169 169 169 32 169 169 169 105 169 169 169 0 169 169 169
CM_{2} 105 169 169 169 44 0 0 255 105 169 169 169 105 169 169 169 105 169 169 169 0 169 169 169
P 105 169 169 169 105 0 0 255 105 169 169 169 0 169 169 169 0 169 169 169 0 169 169 169
MH 105 169 169 169 69 0 0 255 105 169 169 169 0 169 169 169 0 169 169 169 0 169 169 169
在第2 6 10 14 18 22列中报告要绘制的值,而在其余列中记录rgb代码。
我应该在脚本中更正什么?
这是Gnuplot脚本:
set term pngcairo enhanced size 2560,2048 font "Arial,50"
set output "Hist.png"
set encoding utf8
unset title
set yrange [0.0:150.]
set style data histogram
set style histogram cluster gap 1
set style fill solid
set boxwidth 1.
set xtics format ""
set ylabel "Training Set size [-]"
set grid ytics lw 2
rgb(r,g,b) = int(r)*65536 + int(g)*256 + int(b)
unset key
plot "Data.out" u ($0):($2):(0.5):(rgb($3,$4,$5)) :xticlabels(1) w boxes lc rgb variable,\
"" u ($0):($6):(0.5):(rgb($7,$8,$9)) :xticlabels(1) w boxes lc rgb variable,\
"" u ($0):($10):(0.5):(rgb($11,$12,$13)):xticlabels(1) w boxes lc rgb variable,\
"" u ($0):($14):(0.5):(rgb($15,$16,$17)):xticlabels(1) w boxes lc rgb variable,\
"" u ($0):($18):(0.5):(rgb($19,$20,$21)):xticlabels(1) w boxes lc rgb variable
reset
感谢您能给我的帮助。
最好的问候。
答案 0 :(得分:1)
根据gnuplot演示页(http://gnuplot.sourceforge.net/demo/histograms.html),应按以下方式绘制聚簇直方图:
plot "Data.out" u 2:xtic(1), '' u 6, '' u 10, '' u 14, '' u 18
但是,我还没有找到一种可以根据需要从数据文件中为数据分别对直方图条进行着色的方法。我的印象是... lc rgb var
不能与直方图样式配合使用(但是我可能错了)。也许有人可以告诉我们。
因此,我的建议是使用绘图样式with boxes
“手动”实现聚簇直方图。您可以定义要绘制ColSequence = "2 6 10 14 18"
的列的序列,还可以定义一些其他函数来缩短plot命令。
代码:
### clustered histograms realized "manually" with boxes
reset session
unset title
unset key
$Data <<EOD
PS 105 169 169 169 68 0 0 255 105 169 169 169 0 169 169 169 0 169 169 169 0 169 169 169
GMQ 43 0 255 0 39 0 0 255 40 34 139 34 105 169 169 169 105 169 169 169 0 169 169 169
GL 81 0 255 0 40 0 0 255 105 169 169 169 0 169 169 169 0 169 169 169 0 169 169 169
CM_{1} 105 169 169 169 47 0 0 255 105 169 169 169 32 169 169 169 105 169 169 169 0 169 169 169
CM_{2} 105 169 169 169 44 0 0 255 105 169 169 169 105 169 169 169 105 169 169 169 0 169 169 169
P 105 169 169 169 105 0 0 255 105 169 169 169 0 169 169 169 0 169 169 169 0 169 169 169
MH 105 169 169 169 69 0 0 255 105 169 169 169 0 169 169 169 0 169 169 169 0 169 169 169
EOD
set ylabel "Training Set size [-]"
set yrange [0.0:150.]
set grid ytics lw 2
set style fill solid
set boxwidth 1.0
rgb(r,g,b) = int(r)*65536 + int(g)*256 + int(b)
ColSequence = "2 6 10 14 18"
myBoxWidth = 0.8
Gap = 2
ColCount = int(words(ColSequence))
ColNo(n) = int(word(ColSequence,n))
Color(n) = rgb(column(n+1),column(n+2),column(n+3))
BoxOffset(n) = 1./(ColCount+Gap)*n - 0.5
plot for [i=1:ColCount] $Data u ($0+BoxOffset(i)):(column(ColNo(i))): \
(1./(ColCount+Gap)*myBoxWidth):(Color(ColNo(i))) w boxes lc rgb var, \
$Data u 0:(0):xtic(1) w boxes
### end of code
结果: