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
作为文本,即不会排除 0
、0.00
或 0e-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
结果:
我是 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
作为文本,即不会排除 0
、0.00
或 0e-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
结果: