不知怎的,我为情节的勾选标签而苦恼。这是我的想法:
\documentclass[a4paper]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5}
\begin{document}
\begin{figure}
\begin{tikzpicture}
\begin{axis}[scaled ticks=false,
restrict x to domain=0:10,
xtick distance=1,
ytick distance=500,
restrict y to domain=0:3500,
ylabel = {test},
legend pos= {north west}
]
\addplot[no marks, blue] table [x=a, y=b] {data/testdata.txt};
\addlegendentry{test}
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
数据集:
a b
1 370
2 740
3 1110
4 1480
5 1850
6 2220
7 2590
8 2960
9 3330
这将产生以下内容:
现在我想3000
用单位替换 yticklabel,因此我在 ytick 距离后添加了以下行:
yticklabels={0, 500, 1000, ..., 2500, unit, 3500},
但是现在 y 域从 500 开始到 4000 结束,并且缺少标签 0 和 500。我做错了什么?替换一个刻度标签的最佳方法是什么?
答案1
您放置单元的方法可行,但如果您的刻度发生变化,您将不得不做大量工作来再次修复它。因此,我建议修改给出的答案https://tex.stackexchange.com/a/416810/95441以获得通用方法。
(此外,您使用了一些axis
与您的代码无关的选项,即删除它们会产生相同的结果。因此我将它们删除了。)
有关详细信息,请查看代码中的注释。
% used PGFPlots v1.15
\documentclass[border=5pt]{standalone}
\usepackage{siunitx}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.5,
% adjusted from <https://tex.stackexchange.com/a/416810/95441>
din yunit2/.style={
yticklabel style={
name=ylabel\ticknum,
append after command=\pgfextra{\xdef\lastyticknum{\ticknum}}
},
% changed `.code' to `.append code'
after end axis/.append code={
\pgfmathparse{int(\lastyticknum-1)}
% first "overdraw" the node by rectangle, so it isn't seen any more
\fill [white]
(ylabel\pgfmathresult.south west)
rectangle
% the `xshift' is needed to not overdraw the axis line
([xshift=-0.4pt]ylabel\pgfmathresult.north east);
% then place the "unit" text
\node [anchor=base] at (ylabel\pgfmathresult.base) {#1};
},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xtick distance=1,
ytick distance=500,
ylabel={test},
legend pos={north west},
din yunit2={\si{\meter}},
]
\addplot [no marks, blue] table [x=a, y=b] {
a b
1 370
2 740
3 1110
4 1480
5 1850
6 2220
7 2590
8 2960
9 3330
};
\legend{test}
\end{axis}
\end{tikzpicture}
\end{document}
答案2
PGFPlots 在图中创建了两个不可见的刻度标记,因此当您添加时yticklabels={0, 500, 1000, ..., 2500, unit, 3500}
,前两个刻度标记会被消耗来填补这个空白。
您可以强制执行所需的操作ytick
以使其正常工作:ytick={0, 500, ..., 3500}
。
\documentclass[a4paper]{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents}{testdata.txt}
a b
1 370
2 740
3 1110
4 1480
5 1850
6 2220
7 2590
8 2960
9 3330
\end{filecontents}
\pgfplotsset{compat=1.5}
\begin{document}
\begin{tikzpicture}
\begin{axis}[scaled ticks=false,
restrict x to domain=0:10,
xtick distance=1,
ytick distance=500,
ytick= {0, 500, ..., 3500},
yticklabels={0, 500, ..., 2500, unit, 3500},
restrict y to domain=0:3500,
ylabel = {test},
legend pos= {north west}
]
\addplot[no marks, blue] table [x=a, y=b] {testdata.txt};
\addlegendentry{test}
\end{axis}
\end{tikzpicture}
\end{document}