【问题标题】:How to create a histogram with varying bin widths如何创建具有不同 bin 宽度的直方图
【发布时间】:2014-03-25 20:20:27
【问题描述】:

我在其他使用 hist plot 时没有成功。 一个简单的问题是使用以下数据:

age range - frequency - central band width -  bin width  - height (respectively)
1-4    - 30      -      2.5     -         3    -   10
5-6   -  20     -       5.5        -      1   -    20
7-17  -  30       -     12      -         10   -   3

年龄沿 X 轴,具有线性比例,因此 1-4 的 bin 宽度将为 3,高度为 10,5-6 的 bin 宽度将为 1,高度为 20,7-17 将为 10,高度为 3。

如何将这些数据放入 Word/记事本文档.dat 文件中? 然后如何使用它们在gnuplot 中设置直方图?

【问题讨论】:

    标签: plot width gnuplot histogram bin


    【解决方案1】:

    我会使用以下数据文件格式(仅使用空格来分隔字段):

    "age range" "frequency" "central band width" "bin width" "height"
    1-4         30          2.5                  3           10
    5-6         20          5.5                  1           20
    7-17        30          12                   10          3
    
    • 要使用可变 boxwidth 进行绘图,请使用 boxes 绘图样式。这允许您使用列中的值作为宽度。
    • xtic(1) 使用第一列中的条目作为 xticlabel。

    所以一个相当简单的绘图脚本如下所示:

    set style fill solid noborder
    set yrange [0:*]
    set offset 1,1,1,0
    plot 'file.txt' using 3:5:4:xtic(1) with boxes notitle
    

    4.6.3 版本和 pngcairo 终端的结果是:

    【讨论】:

      【解决方案2】:

      昨晚我做了一个相当不错的可变宽度盒子的例子。我正在绘制 FIO 存储性能测试包生成的延迟直方图数据。使用我的编译选项,我有 1856 个 bin,如下所示:

      • 1 ns 宽,0-128 ns(128 个 bin)
      • 2 ns 宽,128-256 ns(64 个 bin)
      • 4 ns 宽从 256-512 ns(64 个 bin)
      • 8 ns 宽,512-1024 ns(64 个 bin)

      • 等等……

      我在绘图时的延迟值以微秒为单位(FIO 提供纳秒,但由于历史原因我想要微秒)。我没有机会在我的数据中包含 bin 宽度。所以我这样做了:

      • f(x) = (2**(int(log(x*1000)/log(2))-6))/1100
      • plot "temp" u 1:2:(f(column(1))) with boxes fs transparent solid 0.7 noborder title "$legend"$base_plot

      f(x) 定义返回给定延迟的框宽度 - 它的工作原理如下:

      1. 首先,x*1000 让我回到纳秒级。
      2. log(x*1000)/log(2) 采用以 2 为底的纳秒对数。
      3. int() 只是给了我整数部分。请注意,现在对于 128 ns,我应该是 7。
      4. -6 将我带到 bin 宽度的以 2 为底的对数。
      5. 2 ** 让我达到 bin 宽度。
      6. /1000 将我从纳秒返回到微秒。

      然后我只是在 plot 命令中使用 f(latency) 作为框宽。

      这行得通 - 据我所知,它似乎工作得很好。对于 x

      我认为这里的主要观察结果是 a) 您不必将宽度作为文字数据 - 如果您可以根据您拥有的数据计算它,那么您就是黄金,并且 b) 列 (n)是 $n 的替代方法,作为在 plot 命令中表达列值的一种方式。就我而言,我将所有这些都放在了 bash 脚本中,并且 bash 截获了 $1。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-28
        • 2020-10-23
        • 2016-02-03
        • 2020-11-04
        相关资源
        最近更新 更多