假设我有一个带有以下轴文本的 pgfplot:
|-----|-----|-----|------|
0 500 1000 1500 2000
有没有办法将轴文本更改为:
|-----|-----|-----|------|
0 0.5K 1K 1.5K 2K
答案1
有两种可能的方法:
你可以使用以下方式即时转换数据
x coord trafo/.code={\pgfmathparse{\pgfmathresult/1000}}
并使用以下方式格式化标签
xticklabel = \pgfmathprintnumber{\tick}\,K
您只需使用
xticklabel = { \pgfmathparse{\tick/1000} \pgfmathprintnumber{\pgfmathresult}\,K }
在这种情况下,结果是相同的,但两种解决方案的行为略有不同。使用第一种方法,您必须使用转换后的单位指定轴限制(例如,xmax=1.5
而不是xmax=1500
)。但是,该解决方案的优点是它还可以处理不如那么“好”的因子1000
。考虑您想要从字节转换为千字节的情况,这是 1024 的因子。如果您使用第二种解决方案,刻度标记将放置在0.488 Ki
、0.977 Ki
等处,而第一种解决方案将标签放置在0.5 Ki
、1 Ki
等处。
第一个解决方案:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
domain = 0:2000,
x coord trafo/.code={\pgfmathparse{\pgfmathresult/1000}},
xticklabel = \pgfmathprintnumber{\tick}\,K
]
\addplot {rnd};
\end{axis}
\end{tikzpicture}
\end{document}
第二种解决方案:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
domain = 0:2000,
xticklabel = {
\pgfmathparse{\tick/1000}
\pgfmathprintnumber{\pgfmathresult}\,K
}
]
\addplot {rnd};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
除了执行 Jake 的解决方案之外,您还可以使用 SI 前缀,包括 x 轴单位内的前缀。
代码
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{units}
\begin{document}
%Without prefix
\begin{tikzpicture}
\begin{axis}[change x base,
x unit=m,
y unit=N,
xlabel=Distance,ylabel=Force]
\addplot coordinates {
(1000,1)
(2000,1.1)
(3000,1.2)
(4000,1.3)
};
\end{axis}
\end{tikzpicture}
%With prefix
\begin{tikzpicture}
\begin{axis}[change x base,
x SI prefix=kilo,x unit=m,
y SI prefix=milli,y unit=N,
xlabel=Distance,ylabel=Force]
\addplot coordinates {
(1000,1)
(2000,1.1)
(3000,1.2)
(4000,1.3)
};
\end{axis}
\end{tikzpicture}
\end{document}
输出
来自第 5.14 节,第 527 页pgf图手动的。