Gnuplot旋转图例

3
我使用LaTex中的rotate包将图表旋转270°,制作了一个横向的直方图。 调整所有标签和刻度没有问题,但我找不到一种方法来旋转图例。

enter image description here

这是我的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

1
http://gnuplot-tricks.blogspot.de/2009/10/turning-of-histogram.html 以相同的方式进行操作,并具有手工制作的图例。 - Karl
https://dev59.com/PWXWa4cB1Zd3GeqPOJGA - Karl
谢谢@Karl。这个方法可行,但我仍然希望有一个更简单的解决方案。调整键和标签很繁琐,特别是在多图中。 - cps
你可以使用“set label 'blabla'”与“set object rectangle...”一起使用。 - PinkFloyd
2个回答

1

我猜这是一个典型的xy-problem。 实际上,您想要一个水平直方图,而由于gnuplot中不存在直接绘制样式,因此您认为解决方案是制作一个垂直直方图并将其旋转,现在您面临如何旋转关键标签的问题。

我知道如果有一个水平直方图会很方便,但据我所知,gnuplot 5.4仍然没有它。 因此,您可以使用绘图样式boxxyerror“手动”完成。这适用于gnuplot 5.0(OP提出问题时的版本)以及一些小的修改,甚至适用于较旧的版本。下面的结果来自wxt终端,但使用epslatex终端应该是相同的。

代码:

### Horizontal grouped histogram
reset session

$Data <<EOD
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.16     7.94    880.9    1.9
F    863.      25.237   778.2    4.2
G    909.6      5.37    941     13
H    895.6     40.41    813     11.3
EOD

N = 2   # number of boxes in group
myGap          = 0.2    # relative gap between groups
myBoxWidth     = 0.8    # relative boxwidth within group
myBoxGrid      = (1.0 - myGap)/N
myBoxHalfWidth = myBoxGrid*myBoxWidth/2
myPosY(i)      = column(0) - 0.5 + (i-1)*myBoxGrid + (myBoxGrid + myGap)/2.
myYLow(i)      = myPosY(i) - myBoxHalfWidth
myYHigh(i)     = myPosY(i) + myBoxHalfWidth
myYCenter(i)   = (myYLow(i) + myYHigh(i))/2

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

plot i=1 $Data u (0):0:(0):2:(myYLow(i)):(myYHigh(i)):ytic(1) w boxxy lc 1 title 'Column2', \
     i=1 ''    u 2:(myYCenter(i)):3 w xerr lc 1 notitle, \
     i=2 ''    u (0):0:(0):4:(myYLow(i)):(myYHigh(i)) w boxxy lc 2 title 'Column4', \
     i=2 ''    u 4:(myYCenter(i)):5 w xerr lc 2 notitle
### end of code

结果:

enter image description here


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

我让你设置样式矩形的属性,以使其与你的直方图相匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接