我是gnuplot新手,并且遇到以下情况。基于this,我有一个gnuplot脚本,如下所示:
clear
reset
set key off
set border 3
set style fill solid 1.0 noborder
bin_width = 0.01;
set boxwidth bin_width absolute
bin_number(x) = floor(x/bin_width)
rounded(x) = bin_width * ( bin_number(x) + 0.5 )
plot '1000randomValuesBetween0and1.dat' using (rounded($1)):(1) smooth frequency
这是一个很好的第一步;但我希望通过计数频率产生的点具有平滑的曲线。 with fillcurves 缺少我想要的两种方式。首先,它没有被平滑(我更喜欢像bezier这样的东西,在 with 之后不可用);其次,填充是通过一种非常意想不到的方式完成的,无法满足我的需求(对我而言是意料之外的)。看到这张图片。
提供更多背景信息:我最终想用它来生成 使用gnuplot绘制小提琴图,而无需事先进行装箱,因此我可以给我的脚本一个单列数据文件,即可开始使用。
编辑:我尝试改写this demo中的“正常”密度图作为第一步,但是失败了;我在文档中读到带宽应该是1 /#points,所以它 在我的情况下应为0.001,这表示我尝试过:
set border 3 front lt black linewidth 1.000 dashtype solid
set style increment default
set style data filledcurves
set xtics border in scale 0,0 nomirror norotate autojustify
set xtics norangelimit 0.00000,0.5,1.0
set title "Same data - kernel density"
set title font ",15" norotate
plot 'random01.dat' using 1:(1) smooth kdensity bandwidth 0.001 with filledcurves above y lt 9
这将导致此图片:。 设置无带宽或较低/较高的值并不能解决问题。 该图使用1:(1)指定,因为我只有一列,因此根据文档,第一个值应为该列,而第二个值将指定权重应为1 /#点数根据文档。
EDIT2:将带宽设置为理想值或根本不设置带宽总是会产生相同的结果,除了改变权重之外,除了y轴的比例之外,其他任何事情都不会改变。
我的数据是1000值,范围是0到1(为测试目的随机创建)。
EDIT3:缩小可能会显示问题的另一方面,因为绘图似乎超出了给定值的间隔(我检查了这些值,并且没有示例<0或> 1)。这是图形:
答案 0 :(得分:0)
gnuplot分发软件包中随附的演示“ violinplot.dem”示例,也可以在线获得,该示例演示了如何使用结合到未绑定数据的“平滑密度”和“带有填充曲线”的组合来完成所需的操作。
此处的在线版本:violin plot demo
注意:
您误读了文档。 1 / N不是推荐带宽,它是归一化的均匀权重。您最初显示的图看起来带宽设置得太低。您的数据值的范围是多少?
我建议让程序为您计算“理想”带宽,然后在您认为太大的情况下对其进行调整。理想值存储在GPVAL_KDENSITY_BANDWIDTH中。增加带宽将使包络更平滑;降低它会强调局部峰值。