Gnuplot 直方图 x 对数刻度

SOK*_*OKS 4 scaling gnuplot histogram

我在 bash 脚本中使用 gnuplot 来绘制一些东西。对于这个特殊的图形,我需要打印矩阵的数量(y 轴),并将矩阵大小作为 x 轴。由于分布可能非常稀疏,我想对 x 和 y 使用对数刻度。它与 y 配合得很好,但 gnuplot 告诉我,当我使用直方图样式时,我无法为 x 轴提供对数刻度。

有什么想法可以调试这个吗?或者如何使用类似的方式呈现结果?

set style data histogram
set style histogram cluster gap 1
set style fill solid border -1
set logscale xy
plot '$res/histo-$ld-$lr-$e-$r' using 2:xtic(1) title 'Run'
Run Code Online (Sandbox Code Playgroud)

错误是:

line 0: Log scale on X is incompatible with histogram plots
Run Code Online (Sandbox Code Playgroud)

提前致谢。

编辑:顺便说一句,我使用的是 gnuplot 4.4 patchlevel 4 并且刚刚更新到最新版本(即 4.6 patchlevel 5)

Chr*_*oph 5

Gnuplot 直方图的工作方式与您想象的有些不同。x 轴不是数字。在您的情况下,第一行第二列中的值放置在 x 值 0 处,y 值取自第二列,手动标签取自第一行第一列。第二行的值放置在 x=1 等位置。

您可以尝试使用框绘图样式,该样式与“传统”x 轴一起使用并支持 x 中的对数刻度:

set logscale xy
set offset 0,0,1,1
set boxwidth 0.9 relative
set style fill solid noborder
plot 'data.dat' with boxes
Run Code Online (Sandbox Code Playgroud)

与数据文件data.dat

1 1000
2 300 
5 150 
20 10 
135 3
Run Code Online (Sandbox Code Playgroud)

结果如下(4.6.5):

在此输入图像描述

为了具有固定的框宽度和变化的框距离,您可以使用第三列将框宽度指定为 x 值的百分比:

set logscale xy
set offset 0,0,1,1
set style fill solid noborder
plot 'data.dat' using 1:2:($1*0.5) with boxes
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

将实际值放在 x 轴上的工作方式如下:

set logscale xy
set offset 0,0,1,1
set style fill solid noborder
plot 'data.dat' using 1:2:($1*0.5):xtic(1) with boxes
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述