为什么我的条形图部分行为不端?

时间:2015-01-28 06:10:03

标签: gnuplot histogram

我想用方框绘制一个类似于直方图的图表,其中条形图有不同的颜色。

这是我的数据:

stage          11402.364    100%    1
App1              78.552    0.69%   2
App2           11323.812    99.30%  2
Read               8.469    0.07%   3
Write             41.285    0.04%   3
Repeat          5748.351    50.41%  3
Count           4933.746    43.27%  3
Count_1         3841.355    33.69%  4
Count_2         1092.391    9.59%   4

但我发现lc rgb variable对我不起作用。目前,我正在使用gnuplot4.2。在4.2中,用于版本4.2的第三个数字是boxwidth而不是box color。

但我尝试了以下方法。由于我只需要4种颜色,因此我尝试使用以下代码手动绘制不同的颜色条:

set boxwidth 0.5 relative
set style fill solid 0.5
set xtics rotate
plot 'histogramdata_2.txt' using ($4 == 1 ? $0 : 1/0):2:xtic(1) with boxes lc 1 , \ 
'' using ($4 == 2 ? $0 : 1/0):2:xtic(1) with boxes lc 2 , \
'' using ($4 == 3 ? $0 : 1/0):2:xtic(1) with boxes lc 3 , \
'' using ($4 == 4 ? $0 : 1/0):2:xtic(1) with boxes lc 4

这就是我得到的,这几乎是我想要的:

enter image description here

但为什么第一列的第一栏是1呢?我已经调整了一段时间,但感到困惑。需要一些帮助。

我认为最好在这里发布一个新问题,因为它与原始问题略有不同。

1 个答案:

答案 0 :(得分:1)

这是一个错误,已在4.6.4或4.6.5中修复。我使用您的脚本和数据集玩了一下:当只绘制一个框并且与特定using过滤无关时,会出现此错误。其他一些情况:

  1. 当我从数据文件中删除“App2”行时,即lc 1和lc 2都只有一行,那么前两个框根本没有绘制。

  2. 当我只用

    打印一个方框时
    plot 'histogramdata_2.txt' using 0:2:xtic(1) every ::::0 with boxes
    

    我的第一个框也错了

  3. 使用awk进行外部过滤时相同:

    set boxwidth 0.5 relative
    set style fill solid 0.5
    set xtics rotate
    awk(c, f) = sprintf("awk '{ if ($4 == %d) { print NR, $0 } }' %s", c, f)
    file = 'histogramdata_2.txt'
    
    set style data boxes
    plot '< '.awk(1, file) using 1:3:xtic(2), \
         '< '.awk(2, file) using 1:3:xtic(2), \
         '< '.awk(3, file) using 1:3:xtic(2), \
         '< '.awk(4, file) using 1:3:xtic(2)
    
  4. 不,我没有找到解决方法(我也试过包含一些虚拟值并使用适当的set xrange跳过它们,但这不起作用)。