gpt4 book ai didi

gnuplot : using a logarithmic axis for a histogram

转载 作者:行者123 更新时间:2023-12-02 05:52:33 25 4
gpt4 key购买 nike

我有一个数据文件,我正在从中创建直方图。

数据文件是:

-0.1  0  0  JANE
1 1 1 BILL
2 2 1 BILL
1 3 1 BILL
6 4 0 JANE
35 5 0 JANE
9 6 1 BILL
4 7 1 BILL
24 8 1 BILL
28 9 1 BILL
9 10 0 JANE
16 11 1 BILL
4 12 0 JANE
45 13 1 BILL

我的 gnuplot 脚本是:

file='test.txt'
binwidth=10
bin(x,width)=width*floor(x/width)
set boxwidth 1

plot file using (bin($1,binwidth)):(1.0) smooth freq with boxes, \
file using (1+(bin($2,binwidth))):(1.0) smooth freq with boxes

我想在 y 中将这些数据绘制在对数刻度上。但是,有一些 0 值(因为某些 bin 为空)无法通过 set logscale y 处理。我收到错误警告:空 y 范围 [1:1],调整为 [0.99:1.01]

根据 gnuplot 的帮助,“频率选项使数据在 x 上单调;具有相同 x 值的点被具有求和 y 值的单个点替换。”

如何获取由带框的平滑频率计算出的 y 值总和的 log10()?

最佳答案

您至少可以做两件事。一种是使用 0 到 1 之间的线性轴,然后使用对数轴,如本 answer 中所述。 。另一种是绘制 table首先设置对数刻度,忽略零值的点。

使用正常的线性轴和您的代码(加上 set yrange [0:11] )您的数据看起来:

enter image description here

现在让我们绘制一个表格,然后设置对数刻度,然后绘制忽略零值:

file='test.txt'
binwidth=10
bin(x,width)=width*floor(x/width)

set table "data"

plot file using (bin($1,binwidth)):(1.0) smooth freq, \
file using (1+(bin($2,binwidth))):(1.0) smooth freq

unset table

set boxwidth 1
set logscale y
set yrange [0.1:11]

plot "data" index 0 using ($1):($2 == 0 ? 1/0 : $2) with boxes lc 1, \
"data" index 1 using ($1):($2 == 0 ? 1/0 : $2) with boxes lc 2

enter image description here

set table有时会在图中生成一些不需要的点,您可以在 x = 0 处看到这些点。要消除它们,您可以使用 "< grep -v u data"而不是"data" .

关于gnuplot : using a logarithmic axis for a histogram,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32465409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com