我有 pgf 线图上 X 轴标签的字符串。有时这些字符串很长并且相互重叠。此网站已解决此问题,但仅适用于静态情况。提出的解决方案始终是移动标签、手动截断它们、更改它们的方向或类似操作。
然而,我将其用于报告生成器,其中标签字符串数组是在运行时动态添加的,因此我不清楚有多少标签或标签有多长。我也无法调整它们的角度,因为这会改变需要保持不变的各种元素的布局和大小。
我希望可能已经有一个包或类可以做到这一点。基本上我需要计算以下内容(假设等宽字体):
- x 轴上有多少可用空间(TS)
- 有多少个标签(NL)
- 每个标签有多少空间 (SL)=(TS/NL)
- 当前字体中一个渲染字符有多大。(CS)
- 一个标签可以容纳多少个字符(CL)=(SL/CS)
- 创建一个标签列表,其中每个标签都是仅使用第一个(CL)字符的原始标签的截断版本。
在重新发明轮子之前,总是值得检查某些东西是否存在。以下是当前情节的示例:
\documentclass[a4paper, landscape, lmargin=0, rmargin=0]{article}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\usepackage{textcomp}
\usepackage[margin=0.1cm]{geometry}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymax=2.8,
ymin=-2.8,
label style={font=\small},
tick label style={font=\small},
ymajorgrids=true,
xtick distance=1,
xticklabels={,,LR Fascia,LR Fascia - Lt Qtr,Lt Fascia,Lt Fascia - Lt Fdr,Lt Fdr,Lt Qtr,RR Fascia,RR Fascia - Rt Qtr,Rt Fascia,Rt Fascia - Rt Fdr,Rt Fdr,Rt Qtr},
width=20cm,
height=9cm,
ytick style={/pgfplots/major tick length=3mm},
max space between ticks=10,
]
\addplot[
mark=*,
] coordinates {
(1,-0.17)
(2,1.04)
(3,-1.08)
(4,-2.2)
(5,1.12)
(6,-1.12)
(7,-0.11)
(8,0.15)
(9,-0.43)
(10,0.85)
(11,-1.28)
(12,-0.26)
};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
好吧,由于对这个问题不感兴趣,我不得不自己研究这个问题。到目前为止,我已经找到了包 trimclip,它帮助我完成了许多工作。将 xLabels 分配替换为:
xticklabels={,,
\clipbox{0pt 0pt \width-1cm 0mm}{LR Fascia},
\clipbox{0pt 0pt \width-1cm 0mm}{LR Fascia - Lt Qtr},
\clipbox{0pt 0pt \width-1cm 0mm}{Lt Fascia},
\clipbox{0pt 0pt \width-1cm 0mm}{Lt Fascia - Lt Fdr},
\clipbox{0pt 0pt \width-1cm 0mm}{Lt Fdr},
\clipbox{0pt 0pt \width-1cm 0mm}{Lt Qtr},
\clipbox{0pt 0pt \width-1cm 0mm}{RR Fascia},
\clipbox{0pt 0pt \width-1cm 0mm}{RR Fascia - Rt Qtr},
\clipbox{0pt 0pt \width-1cm 0mm}{Rt Fascia},
\clipbox{0pt 0pt \width-1cm 0mm}{Rt Fascia - Rt Fdr},
\clipbox{0pt 0pt \width-1cm 0mm}{Rt Fdr},
\clipbox{0pt 0pt \width-1cm 0mm}{Rt Qtr},
},
将标签长度截断为 1cm。
然而,在我解决一些问题之前,我不会将其标记为可接受的答案:
我希望通过 latex 代码计算 1cm 值,而不是手动设置。我不确定在评估阶段地块是否真的知道它会有多大,所以这可能是不可能的。
trimclip 似乎破坏了我的格式,如果我将标签设置为某种颜色,例如每个 tick/.append style={green},那么在使用 clipbox 时它们会变成黑色
即使垂直裁剪设置为 0,clipbox 似乎也会截断大写字母的顶部
尽管如此,它还是比我迄今为止得到的答案更好,并且可能对某些人有用