我有一个c ++程序,它从样本数据生成10000个中位数,并将中位数输出到名为“data.dat”的文件中。然后我从here修改了这个gnuplot脚本以生成直方图:
reset
n=100 #number of intervals
max=500
min=0 #min value
width=(max-min)/n #interval width
#function used to map a value to the intervals
hist(x,width)=width*floor(x/width)+width/2.0
set term png #output terminal and file
set output "histogram.png"
set xrange [min:max]
set yrange [0:]
#to put an empty boundary around the
#data inside an autoscaled graph.
set offset graph 0.05,0.05,0.05,0.0
set xtics min,(max-min)/5,max
set boxwidth width*0.9
set style fill solid 0.5 #fillstyle
set tics out nomirror
set xlabel "Medians"
set ylabel "Frequency"
#count and plot
plot "data.dat" u (hist($1,width)):(1.0) smooth freq w boxes lc rgb"green" notitle
set xrange [GPVAL_DATA_X_MIN:GPVAL_DATA_X_MAX]
reset
replot
这个脚本正是我想要的,但我需要能够改变直方图的x范围。我的C ++程序要求用户使用样本数据的上边界。这意味着中位数据可以是介于0和用户输入的任何位置之间的任何位置作为上边界。正如您在上面所看到的,我试图更改数据的xrange,但我无法让它工作。即使我使用GLPVAL_DATA并重置xrange并重新绘制数据,直方图范围也不会改变。我只得到原始图形输出的0到500的相同xrange。我在这里做错了什么?