Gnuplot 旋转键

问题描述 投票:0回答:2

我使用 LaTex 中的旋转包将图表旋转 270° 来制作水平直方图。 调整所有标签和抽动是没有问题的,但是我没有找到旋转密钥的方法。

这是我的 gnuplot 代码:

set terminal epslatex  size 16cm, 32cm
set output "stackexchange.tex"
set xrange [-1:8]
set key
set boxwidth 0.95
set style data histograms
set style histogram errorbars
set style fill solid 0.8
set style line 1 lt 1 lc rgb "#0080B0" lw 3
set yrange[600:1100]
unset ytics
set y2tics rotate
set y2label rotate "xyz / abc"
set xtics nomirror rotate scale 0 
plot 'stackexchange.dat' using 2:3:xticlabels(1) ls 1 title 'A', '' using 4:5 ls 1 fill pattern 6 title 'B'

这就是我在 LaTex 中实现它的方式:

\begin{figure}
        \begin{turn}{270}
        \resizebox{!}{0.9\textwidth}{\input{stackexchange}}
        \end{turn}
\end{figure}

这是我的数据文件:

A     890.1  3.2  789.9 11.7 
B    626.97      20.467      862.8 12.3
C   923.9   5.89  963.8 3.7
D    785.233     15.921     627   2.3
E    903.167     7.94 880.9 1.9
F    863.43      25.237     778.2 4.2
G     909.6 5.370     941   13
H     895.633     40.401    813   11.3
gnuplot
2个回答
1
投票

我想这是一个经典的xy问题。 实际上,您想要一个水平条形图,并且由于它在 gnuplot 中不作为直接绘图样式存在,您认为解决方案是制作一个垂直条形图并旋转它,现在您遇到了如何旋转条形图的问题关键标签。

我知道如果有水平条形图会很方便,但据我所知 gnuplot 5.4 仍然没有它。 实际上,它并不是真正需要的,因为您可以使用绘图样式

boxxyerror
(至少从 gnuplot 4.0 开始可用)“手动”完成它。以下脚本适用于 gnuplot>=5.0 (OP 提出问题时的版本),并且即使对于旧版本也进行了一些小的修改。下面的结果来自
wxt
终端,但与
epslatex
终端的工作原理应该相同。

剧本相当笼统。因此,我在 OP 的数据中添加了两列,只需设置

N=3
,您就可以在图表中获得其他数据(参见第二张图片)。

脚本:(适用于 gnuplot>=5.0.0,2015 年 1 月)

### Horizontal grouped bar chart
reset session

$Data <<EOD
A    890.1      3.2     789.9   11.7      627      2.3 
B    626.97    20.467   862.8   12.3      778.2    4.2
C    923.9      5.89    963.8    3.7      789.9   11.7
D    785.233   15.921   627      2.3      813     11.3
E    903.16     7.94    880.9    1.9      862.8   12.3
F    863.      25.237   778.2    4.2      880.9    1.9
G    909.6      5.37    941     13.0      941     13.0
H    895.6     40.41    813     11.3      963.8    3.7
EOD

N        = 2                              # number of boxes in group
gap      = 0.2                            # relative gap between groups
width    = 0.8                            # relative boxwidth in group
grid     = (1.0 - gap)/N                  # raster
y(i)     = column(0) + (i-N/2.-0.5)*grid  # y-position
dy       = grid*width/2.                  # half relative boxwidth 
title(i) = sprintf("column %d",2*i)       # key/legend entry

set style fill transparent solid 0.5 
set offset 0,0,0.5,0.5
set xrange [600:1100]
set yrange [:] reverse
set ytics out
set key noautotitle

plot for[i=1:N] $Data u (0):0:(0):i*2:(y(i)-dy):(y(i)+dy):ytic(1) w boxxy lc i ti title(i), \
     for[i=1:N]    '' u i*2:(y(i)):i*2+1 w xerr lc i
### end of script

结果:

N = 2

N = 3


0
投票

我想你可以做这样的事情:

x = 0.5
y = 1000
dx = 0.1
dy = 50
set label 'B' at x,y rotate by 90 offset 0.5,-1
set style rectangle fc ls 3 fs pattern 6 border 3 
set object rectangle from x,y to x+dx,y+dy

我让您设置

style rectangle
的属性,使其与您的直方图匹配。

© www.soinside.com 2019 - 2024. All rights reserved.