GNUPlot - 如何控制刻度标签中的行间距?

时间:2014-07-23 13:13:19

标签: label gnuplot spacing

我正在尝试绘制一个在其xticks上有两行标签的图表。我不能再减少字体了,因为它变得不可读(该图是2x2多色图的一部分)。 问题是标签中两条线之间的分离太大,以至于它们太靠近下一列的标签。

我想减少行间距,以便标签的行在它们之间变得更近,但是更接近其他标签的行。

我考虑过手动放置标签(使用函数来计算每条线的位置),但在此之前我想知道是否有人有更简单的解决方案。

非常感谢!

我在Ubuntu 14上使用“gnuplot 4.6 patchlevel 4”。下面是MWE:

# Requires gnuplot >= 4.6
set terminal pdf color solid font "Helvetica, 10" enhanced size 4, 3.72
set output 'mwe.pdf'
set border 3 lc rgb "#000000"
set bmargin 9
set ylabel offset -1
TicksFont = ", 10"
Title2Font = ", 14"

set yrange[0:180 < * ]
set format y "%.0f%%"

set xtics out scale 0, 0 nomirror rotate by 90 right offset 0,0 font TicksFont
set ytics out nomirror font TicksFont
unset key

set datafile separator ";"
set style fill transparent solid 1.0 border -1
set style data boxes
set boxwidth 1.0

#Bottom-left plot
set title "C) Third (sub)plot" font Title2Font

plot '-' using ($0):2:(0xFF8080):xtic(1) notitle lc rgb variable
# Label; Value
01. Aaaaa:\nAaaaaaaaa(AA);                  100
02. Bbbbb:\nBbbbbbbbbbbb(BB);               20
03. Ccccc: Ccccccc(Ccc),\nCccccccc(CCC);    30
04. Dddd: DDDD,\nDDDDDDDDDDDD(DD);          40
;NaN
01. Aaaaa:\nAaaaaaaaa(AA);                  100
02. Bbbbb:\nBbbbbbbbbbbb(BB);               20
03. A single-liner;                         30
04. Dddd: DDDD,\nDDDDDDDDDDDD(DD);          40
;NaN
01. Aaaaa:\nAaaaaaaaa(AA);                  100
02. Bbbbb:\nBbbbbbbbbbbb(BB);               20
03. A single-liner;                         30
04. Dddd: DDDD,\nDDDDDDDDDDDD(DD);          40
05. Eeee: EEEE,\nEEEEEEEEEEEE(EE);          50
end;

3 个答案:

答案 0 :(得分:4)

从gnuplot中,您无法直接控制用于标签的行高。但是你的问题有一个非常肮脏的解决方法:

您可以在新行字符处拆分标签,使用增强标签语法更改每行的字体大小,但为新行字符设置不同的字体大小。所以标签

set label at 0,0 "first line\nsecond line" font ",10"

更改为

set label at 0,0 "{/=10 first line}\n{/=10 second line} font ",8"

您的脚本将更改为:

# Requires gnuplot >= 4.6
set terminal pdf color solid font "Helvetica, 10" enhanced size 4, 3.72
set output 'mwe.pdf'
set border 3 lc rgb "#000000"
set bmargin 9
set ylabel offset -1
TickSize = 10
TicksFont = ", ".TickSize
Title2Font = ", 14"

set yrange[0:180 < * ]
set format y "%.0f%%"

set xtics out scale 0, 0 nomirror rotate by 90 right offset -0.1,0 font ",8"
set ytics out nomirror font TicksFont
unset key

set datafile separator ";"
set style fill transparent solid 1.0 border -1
set style data boxes
set boxwidth 1.0

#Bottom-left plot
set title "C) Third (sub)plot" font Title2Font

set_label_size(s) = sprintf('{/=%d %s}', TickSize, s)
label(s) = strstrt(s, "\n") ? set_label_size(s[:strstrt(s, "\n")-1])."\n".set_label_size(s[strstrt(s, "\n")+1:]) : set_label_size(s)

plot '-' using ($0):2:(0xFF8080):xtic(label(strcol(1))) notitle lc rgb variable
# Label; Value
01. Aaaaa:\nAaaaaaaaa(AA);                  100
02. Bbbbb:\nBbbbbbbbbbbb(BB);               20
03. Ccccc: Ccccccc(Ccc),\nCccccccc(CCC);    30
04. Dddd: DDDD,\nDDDDDDDDDDDD(DD);          40
;NaN
01. Aaaaa:\nAaaaaaaaa(AA);                  100
02. Bbbbb:\nBbbbbbbbbbbb(BB);               20
03. A single-liner;                         30
04. Dddd: DDDD,\nDDDDDDDDDDDD(DD);          40
;NaN
01. Aaaaa:\nAaaaaaaaa(AA);                  100
02. Bbbbb:\nBbbbbbbbbbbb(BB);               20
03. A single-liner;                         30
04. Dddd: DDDD,\nDDDDDDDDDDDD(DD);          40
05. Eeee: EEEE,\nEEEEEEEEEEEE(EE);          50
end;

之前(左)和之后(右):

enter image description here enter image description here

答案 1 :(得分:2)

您可以切换到epslatex终端并直接在gnuplot脚本上使用latex语法。然后你可以使用带有负参数的\vspace{}命令来减少行间距,如下所示:

\shortstack{01. Aaaaa: \vspace{-0.2em} \\ Aaaaaaaaa(AA)}

虽然你需要逃避反斜杠:

\\shortstack{01. Aaaaa: \\vspace{-0.2em} \\\\ Aaaaaaaaa(AA)}

答案 2 :(得分:0)

只更改整个绘图的大小是否可以接受,例如将绘图宽度从4英寸更改为6,高度从3.72更改为5.58?

这样,如果将宽高比包含在不同的文档中,则会保留宽高比。

在:

enter image description here

后:

enter image description here