繁体   English   中英

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

[英]GNUPlot - How to control interline spacing in tick labels?

我正在尝试绘制在xticks上具有两行标签的图形。 我无法再减少字体,因为它变得不可读(该图是2x2多图的一部分)。 问题是标签中的两行之间的间距太大,因此它们变得与下一列的标签太近。

我想减小行距,以使标签的线之间的距离更近,但更接近其他标签的线。

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

非常感谢!

我在Ubuntu 14上使用“ gnuplot 4.6补丁程序级别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;

在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;

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

在此处输入图片说明在此处输入图片说明

您可以切换到epslatex终端并在gnuplot脚本上直接使用epslatex语法。 然后,可以将\\vspace{}命令与负参数一起使用以减小行距,如下所示:

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

尽管您需要转义反斜杠:

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

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

如果您将纵横比包含在其他文档中,则会保留这种纵横比。

之前:

在此处输入图片说明

后:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM