我想将最后一个设置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 的刻度。