gnuplot 绘图科学记数法(x 轴上的指数值)

gnuplot plot scientific notation (exponential value on x-axis)

我是 gnuplot 的新手,今天我在 Whosebug 上学到了很多关于情节的问题,但现在为了我的研究,我需要做另一个如下图所示的问题:

数据是同一个tipe,我收集了它们并在file.dat中仅隔离了我需要的列,示例如下:

5.38e-51 1
2.75e-81 1
5.3e-67 1
8.71e-170 4
3.62e-59 3
2.98e-52 2
3.2e-31 1
2.98e-54 2
3.85e-29 2
5.38e-57 1
3.2e-33 2
2.75e-88 1
3.2e-34 1
9.89e-37 1
5.38e-59 2
3.2e-35 2
1.68e-168 1
1.81e-101 1
9.89e-39 1
2.98e-59 2
3.2e-39 1
1.07e-110 3
1.07e-111 2
1.81e-107 2
2.82e-40 4
2.6e-108 1
1.07e-115 1

我的问题是我希望 x 轴上的 x 是指数,如 1E-x。 我尝试使用 set format set format x '%.0f'.sprintf('e%d') 但它不起作用。 我怎样才能做到这一点? 谢谢。

如果你想绘制跨越多个数量级的值,你可以在对数刻度上绘制它 或取 log10() 的值并以线性比例绘制它们。 根据您没有代码和详细信息的描述,我猜您有 您显示的数据并希望创建直方图并在 x-axis.

上显示负 log10

注意: 在您之前的数据中,您还有 0.0,这将 mess-up smooth freq 选项与对数箱一起。请注意,set datafile missing "0.0" 只会排除 0.0 作为文本,即不会排除 00.000e-10。因此,请确保您的数据中没有零,这不适用于对数刻度。

代码:

### plot histogram with logarithmic bins
reset session

$Data <<EOD
5.38e-51   1
2.75e-81   1
5.3e-67    1
8.71e-170  4
3.62e-59   3
2.98e-52   2
3.2e-31    1
2.98e-54   2
3.85e-29   2
5.38e-57   1
3.2e-33    2
2.75e-88   1
3.2e-34    1
9.89e-37   1
5.38e-59   2
3.2e-35    2
1.68e-168  1
1.81e-101  1
9.89e-39   1
2.98e-59   2
3.2e-39    1
1.07e-110  3
1.07e-111  2
1.81e-107  2
2.82e-40   4
2.6e-108   1
1.07e-115  1
EOD

set xlabel "-log_{10}(x)"
set xrange[-15:200]
set xtics 10 out
set ylabel "Sequences"
set yrange [0:]
set key noautotitle

# Histogram with logarithmic bins
BinWidth = 10 
Bin(x)   = floor(-log10(x)/BinWidth)*BinWidth + BinWidth*0.5

set boxwidth BinWidth
set style fill solid 0.3
set offset 1,1,1,0
set grid x,y

set datafile missing "0.0"    # exclude zero, otherwise it will mess up "smooth freq"

plot $Data u (Bin()):2 smooth freq with boxes lc "red"
### end of code

结果: