【问题标题】:gnuplot stacked histogram overlappinggnuplot 堆叠直方图重叠
【发布时间】:2016-12-19 16:48:13
【问题描述】:

我想要使用 gnuplot 绘制以下两个数据文件。

timings0.log:

41420
32587
4082
4668
81
547
325

timings1.log:

41297
32393
4106
4720
75
502
266

它们代表一个软件的不同组件的时序,其中每个文件是由具有不同配置的执行生成的,并且文件中的每一行对应于不同的组件。我正在使用 sed 命令来提取计时文件中的特定行(遵循建议的here 方法),并能够显示仅出现某些组件的图。我想以堆叠直方图的方式在同一个图中显示两组时间。

这是我当前的代码:

set terminal svg size 500,500 enhanced font 'Times-Roman,14'

set key vertical maxrows 3

set style data histograms
set style histogram rowstacked title offset 0,-1 gap 1
set boxwidth 0.5 relative
set style fill solid 1.0

set xlabel offset 0,1
set xrange [-1:2]

set xtics 0,1
set xtics add ("1st Config"0)
set xtics add ("2nd Config"1)
set xtics add (""2)

set yrange [0:50000]
set ylabel "Time (ms)"
set ytics 0,5000,50000

set output "test.svg" 

plot newhistogram "0" lt 1, "<(sed '2!d' timings0.log)" notitle, "<(sed '3!d' timings0.log)" notitle, "<(sed '4!d' timings0.log)" notitle, "<(sed '5!d' timings0.log)" notitle,\
     newhistogram "1" lt 1, "<(sed '2!d' timings1.log)" t "Load", "<(sed '3!d' timings1.log)" t "Sort", "<(sed '4!d' timings1.log)" t "Calculation", "<(sed '5!d' timings1.log)" t "Cleanup"

当我只显示一个直方图(例如对应于 timings0.log)时,代码可以完美运行,但是在运行上述脚本来显示两个直方图时,它们无法展开xaxis,它们似乎重叠。以下是上述脚本的输出:

可能有一个明显的解决方案,但经过多次尝试和搜索在线可用的多个资源后,我未能获得正确的输出。我正在使用 gnuplot 5 补丁级别 3。

提前致谢,任何帮助将不胜感激!

【问题讨论】:

    标签: plot gnuplot histogram


    【解决方案1】:

    试试at:

    plot newhistogram at 0 lt 1, ...
         newhistogram at 1 lt 1, ...
    

    我也收到gap 的错误,至少在 gnuplot 4.6 中是这样。它对rowstacked 没有影响,但您可以在之前 offset 使用它。整体代码:

    set terminal svg size 500,500 enhanced font 'Times-Roman,14'
    
    set key vertical maxrows 3
    
    set style data histograms
    set style histogram rowstacked
    set boxwidth 0.5 relative
    set style fill solid 1.0
    
    set xlabel offset 0,1
    set xrange [-1:2]
    
    set xtics 0,1
    set xtics add ("1st Config"0)
    set xtics add ("2nd Config"1)
    set xtics add (""2)
    
    set yrange [0:50000]
    set ylabel "Time (ms)"
    set ytics 0,5000,50000
    
    set output "test.svg"
    
    plot newhistogram at 0 lt 1, "<(sed '2!d' timings0.log)" notitle, "<(sed '3!d' timings0.log)" notitle, "<(sed '4!d' timings0.log)" notitle, "<(sed '5!d' timings0.log)" notitle,\
         newhistogram at 1 lt 1, "<(sed '2!d' timings1.log)" t "Load", "<(sed '3!d' timings1.log)" t "Sort", "<(sed '4!d' timings1.log)" t "Calculation", "<(sed '5!d' timings1.log)" t "Cleanup"
    

    对我来说是这样的:

    【讨论】: