【问题标题】:Gnuplot Histogram with overlapping bar pairs具有重叠条形对的 Gnuplot 直方图
【发布时间】:2018-04-24 02:04:41
【问题描述】:

我正在尝试绘制一个条形图/直方图,它针对 x 轴的每个点显示两个条形图,每个条形图分为三个部分。取以下数据集:

Min #   Max #   Avg #   Min %   Max %   Avg %
6       12      6.67    13      100     35.25
0       6       3       0       90      43.25
235     1243    553     66.67   100     83.43

这个想法是,对于每一行,会有一对竖线,左边的一个代表三个 # 值,右边的一个代表三个 % 值。数值是虚构的,但规模或多或少是真实的。

到目前为止,我已经设法得到了以下脚本,这是我在网上找到的几个脚本的科学怪人:

set ytics 10 nomirror tc lt 1
set y2tics 100 nomirror tc lt 2
set yrange [0:120]
set y2range [0:1500]
set style fill solid border -1

plot "table2.dat" using 5:xticlabels(1) with boxes lt rgb "#40FF00" t "Max \%",\
 "" using 6 lt rgb "#406090" t "Avg \%",\
 "" using 4 with boxes lt rgb "#403090" t "Min \%"

这将绘制出以下图表:

我似乎无法弄清楚如何为前三列放置第二个栏。理想情况下,那个“X”也将被一条切割条的虚线代替。两个 Y 轴的原因是每个条遵循不同的比例,因此第二条必须与右侧的 y 轴成比例。最后,我不得不添加使 yrange 高于 100 的小“技巧”​​,这样条形就不会“触及顶部”。如果有其他方法可以做到这一点,那就太好了。

提前感谢您提供的任何帮助,我是 gnuplot 的新手,但由于尝试使用电子表格工具制作此图表更加痛苦,我希望有人能够提供帮助至少其中一些问题。

编辑:我会为这个问题提供更好的标题。

【问题讨论】:

标签: gnuplot histogram bar-chart


【解决方案1】:

您可以通过将 boxwidth 设置为默认宽度的 0.4 并定义一个函数(我在此处使用 f)将第 1 到 3 列中的数据也转换为百分比值,并明确提供x 与语法 x:y 协调并使用 $1 引用第 1 列等。$0 是行。

set boxwidth 0.4 relative
f(y,max) = (y*100./max)

plot "table2.dat" \
 using 5:xticlabels(1) with boxes lt rgb "#40FF00" t "Max \%",\
 "" using 6  lt rgb "#406090" t "Avg \%",\
 "" using 4 with boxes lt rgb "#403090" t "Min \%",\
 "" using ($0-.5):(f($2,$2)) with boxes lt rgb "red" t "Max",\
 "" using ($0-.5):(f($3,$2))  lt rgb "blue" t "Avg",\
 "" using ($0-.5):(f($1,$2)) with boxes lt rgb "orange" t "Min"

我使用了一些花哨的颜色来展示新的盒子:

【讨论】:

    猜你喜欢
    • 2018-10-24
    • 2016-12-19
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多