在直方图(聚类)中,如何根据条件将垂直文本放在某些条形的位置?

时间:2016-08-09 08:03:05

标签: gnuplot histogram

在Gnuplot中,我使用直方图(聚集),但并非所有数据点都有有效值。在那些地方,我想用垂直文字替换栏,上面写着“无法服务”。我该怎么做?

我目前的代码:

set style data histogram
set style histogram cluster gap 2
set boxwidth 0.9
set xtic rotate by -45 scale 0 

set output "test.pdf"
plot 'data.txt' using 2:xtic(1) fs pattern 1 ti col, '' u 3 fs pattern 2 ti col

数据文件包含:

  

类型“磁性”“电”
  “高负荷”12000 12721.033920
  “med load”15620.011886 15783.706215
  “低负荷”15636.000000 16254.000000

1 个答案:

答案 0 :(得分:1)

这是一种超级黑客的方法。我修改了你的文件以添加" NaN":

"high load" NaN 12721.033920
"med load" 15620.011886 NaN
"low load" 15636.000000 16254.000000

现在我绘制所有with boxes的位置,其中每个方框的位置是根据记录在数据文件中出现的顺序(第0列)计算的。这是"手动"这里定义了,但您应该能够根据记录数和从xrange获得的每条记录的列数来编写一个获取stats和框分隔的函数。 boxwidth也取决于这些值。

set xtic rotate by -45 scale 0
ymax = 20000
set yrange [0:ymax]

nrecords = 3
ncolumns = 2

set xrange [0:nrecords+1]

# Calculate boxwidth from available space per column
gap = 1./ncolumns/5.
width = 1./ncolumns/2.-gap/2.
set boxwidth width

plot "data.txt" u ($0+1.-width/2.-gap/2.):($2) w boxes t "data1", \
     "" u ($0+1.+width/2.+gap/2.):($3) w boxes t "data2", \
     "" u ($0+1.):(ymax/6.):(stringcolumn(2) eq "NaN" ? \
     "Cannot serve" : ""):xtic(1) w labels rotate by 90 offset \
     first -width/2.-gap/2.,0 not, \
     "" u ($0+1.):(ymax/6.):(stringcolumn(3) eq "NaN" ? "Cannot serve" \
     : ""):xtic(1) w labels rotate by 90 offset first width/2.+gap/2.,0 not

enter image description here