我试图在gnuplot中绘制水平直方图。
这是我目前的垂直(通常类型)直方图:
width=0.5
hist(x,width)=width*floor(x/width)+width/2.0
set boxwidth width*0.9
set style fill solid 0.5
plot "a" u (hist($2,width)):(1.0) smooth freq w boxes lc 3 notitle
现在我需要的是完全相同的结果,但顺时针旋转了90度。
我在下面尝试了这个,但结果真的不是我所期望的。
width=0.5
hist(x,width)=width*floor(x/width)+width/2.0
set boxwidth width*0.9
set style fill solid 0.5
plot "a" u (1.0):(hist($2,width)) smooth freq w boxes lc 3 notitle
答案 0 :(得分:2)
如果唯一关注位图输出,则在使用convert
渲染直方图后,也可以使用ImageMagick套件的gnuplot
命令。
convert -rotate 90 figure_in.png figure_out.png
在此之前,使用gnuplot
指令轮播rotate
内的所有标签。
提供了示例和更多详细信息here。
答案 1 :(得分:1)
虽然gnuplot中没有对水平图的通用支持,但您可以使用 boxxyerrorbars 样式制作相当不错的水平条形图。它有一个6列输入(x,y,xlow,xhigh,ylow,yhigh)。您只需要事先自己计算酒吧的价值。
我刚刚做了这样的事情($ 2指'中心'):
使用'median'绘制'datafile.csv':'center':'min':'max':( $ 2-0.4):( $ 2 + 0.4)with boxxyerrorbars
如果你想要沿着y轴的类别文本标签,我们在这里(我从数据文件的第一列中取出它们):
使用'median'绘制'datafile.csv':'center':'min':'max':( $ 2-0.4):( $ 2 + 0.4):ytic(1)with boxxyerrorbars
答案 2 :(得分:1)
感谢。这有效。这是完成整个事情的一贯方式。 首先在另一个文件中打印表格格式的数据文件的常用输出,例如datatable.txt
reset
binwidth=0.015
bin(x,width)=width*floor(x/width) + binwidth/2.0
set table
set output 'datatable.txt'
plot './datafile.txt' using (bin($1,binwidth)):(1.0) smooth freq w p
unset table
set output "horizontalhist.png"
pl './datatable.txt' u 2:1:(0.0):2:(($1)-(binwidth/2.0)):(($1)+(binwidth/2.0)) w boxxyerrorbars
这应该给你水平直方图。
答案 3 :(得分:1)
虽然这个问题比较老了,基本已经回答了(但是,没有被接受),让我用插图来更新一下,仅供记录。
据我所知,在当前的 gnuplot (5.4.0) 中仍然没有专门的水平直方图样式,可能是因为您可以简单地使用 boxxyerror
(如果您知道如何)来实现它,如已经在用户@pygrac 和@adhip agarwala 的答案以及@Christoph 链接的答案。
因此,没有必要创建垂直直方图并旋转它,因为绘图样式 boxxyerror
在 gnuplot 4.0 (2004) 或更早版本中已经存在。
由于 gnuplot 5.0.0 (2015) 数据块可用,因此不再需要将直方图数据 smooth freq
写入磁盘上的文件。
代码:
### horizontal histogram (gnuplot >=5.0.0)
reset session
# create some random test data
set table $Data
set samples 2000
plot '+' u 1:(invnorm(rand(0))+2) w table
set samples 1000
plot '+' u 1:(invnorm(rand(0))-2) w table
unset table
binwidth = 0.25
bin(x) = binwidth * floor(x/binwidth)
set table $Histo
plot $Data u (bin($2)):(1) smooth freq
unset table
set style fill transparent solid 0.5
plot $Histo u (0):1:(0):2:($1-binwidth/2.):($1+binwidth/2.) w boxxy ti "Horizontal Histogram"
### end of code
结果: