4

我正在尝试在 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
4

4 回答 4

2

如果位图输出是唯一的关注点,也convert可以使用gnuplot.

convert -rotate 90 figure_in.png figure_out.png

在执行此操作之前,gnuplot请使用rotate指令轮换所有标签。

此处提供了示例和更多详细信息。

于 2016-01-15T11:22:35.887 回答
1

虽然在 gnuplot 中还没有对水平图的通用支持,但您可以使用boxxyerrorbars样式制作相当不错的水平条形图。它有一个 6 列输入(x、y、xlow、xhigh、ylow、yhigh)。您只需要事先自己计算条形的值。

我只是做了这样的事情($2 指的是“中心”):

使用 'median':'center':'min':'max':($2-0.4):($2+0.4) 和 boxxyerrorbars 绘制 'datafile.csv'

如果您想要沿 y 轴的类别文本标签,我们开始吧(我从数据文件的第一列中获取它们):

使用 'median':'center':'min':'max':($2-0.4):($2+0.4):ytic(1) 和 boxxyerrorbars 绘制 'datafile.csv'

于 2013-02-16T21:07:43.013 回答
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   

这应该给你水平直方图。

于 2015-01-20T05:47:42.070 回答
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

结果:

在此处输入图像描述

于 2021-01-06T08:18:56.747 回答