如何仅更改最后一个 xticklabel?

如何仅更改最后一个 xticklabel?

我想将最后一个设置xticklabel\infty。如何在不知道值的情况下实现这一点xtick

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}[
      xticklabel={\tick >= 24 ? $\infty$ : $\pgfmathprintnumber{\tick}$}
    ]
      \addplot+[] table {\somedata};
    \end{axis}
  \end{tikzpicture}
\end{document}

(注意:上面的内联条件根本不起作用,它只是为了说明我正在尝试做的事情)

答案1

您可以为标签节点分配名称,并通过该名称访问最后一个节点。遗憾的是,节点文本在创建后无法更改,因此您必须使用更改后的标签覆盖它。这里有一个名为的新样式,overwrite last x tick label它接受一个可选参数来指定最后一个标签应该用什么覆盖。该样式首先在旧标签上绘制一个白色矩形,然后在其上放置一个新节点。这确保旧标签被完全覆盖,即使新标签占用的空间较少。

\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{
    overwrite last x tick label/.style={
        every x tick label/.append style={alias=lasttick},
        extra description/.append code={
            \fill [white] (lasttick.north west) ++(0pt,-\pgflinewidth) rectangle (lasttick.south east);         
            \node [anchor=base] at (lasttick.base) {#1};}
    },
    overwrite last x tick label/.default={$\infty$}
}

  \begin{tikzpicture}
    \begin{axis}[overwrite last x tick label]
      \addplot table [row sep=crcr]{
      0 1\\
      2 1\\
      3 2\\
      4 3\\};
    \end{axis}
  \end{tikzpicture}
\end{document}

答案2

可以使用轴描述坐标系:

在此处输入图片描述

笔记:

  • 需要添加clip=false到轴上。
  • 因此fill=whites真正的标签隐藏在 下方\infty
  • draw=none可以省略。
  • yshift=1.5ex是让标签处于正确的垂直位置所必需的。也许有更好的方法可以做到这一点。
  • 如果你xmax在轴选项中明确指定,则可以通过以下方式访问该值\pgfkeysvalueof{/pgfplots/xmin}则可以按照以下方式访问该值如何在 PGFplots 轴环境中访问 \xmin、\xmax、\ymin、\ymax

代码:

\documentclass[border=2pt]{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture} 
\begin{axis}[clip=false] 

\addplot {x}; 

\node[draw=none,yshift=1.5ex,fill=white] at (xticklabel cs:1) {$\infty$};
\end{axis} 
\end{tikzpicture}
\end{document}

答案3

只要数字在 LaTeX 数字范围 -16384...16384 内,您就可以使用 TeX(或 LaTeX)条件。\tick pt这里,后缀pt允许您应用定点算术(因为pt在 TeX 中表示为定点数):

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}[
      xticklabel={\ifdim\tick pt<6pt $\pgfmathprintnumber{\tick}$ \else $\infty$\fi}
    ]
      \addplot+[] {x};
    \end{axis}
  \end{tikzpicture}
\end{document}

这里,我选择“6”作为最右边的值。

显然,该方法需要手动调整,因为它假设恰好有一个位置 >= 6 的刻度。

相关内容