是否可以自动截断长轴标签?

是否可以自动截断长轴标签?

我有 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 似乎也会截断大写字母的顶部

尽管如此,它还是比我迄今为止得到的答案更好,并且可能对某些人有用

相关内容