我想将 x 轴刻度标签更改为0K 20K 40K 60K 80K
类似于此图表中的 y 轴刻度标签:
我的 LaTeX MVP 生成图像:
\begin{filecontents*}{data.csv}
iter;prod
0;-10589.143027099373
2080;-10137.34268961796
5948;-9823.312236854963
8461;-9531.740064852165
11565;-9374.010299137673
14779;-9174.160659364205
18133;-8812.173184097246
21281;-8524.717622361832
24346;-8334.931265113803
28693;-8260.530715627245
33657;-8144.811407051079
37692;-8026.3359694899145
41347;-7927.802055824076
45664;-7854.28445759018
50737;-7837.35420135146
54924;-7697.667649897329
59341;-7681.064772064068
64499;-7460.053337376205
71204;-7385.997574969703
76470;-7330.933540294809
78661;-7315.709786834038
81232;-7232.586421626356
\end{filecontents*}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{csvsimple}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
ymax=0,
xticklabel = {
\pgfmathparse{\tick/1000}
\pgfmathprintnumber{\pgfmathresult}\,K
},
% scaled x ticks=false,
yticklabel = {
\pgfmathparse{\tick/1000}
\pgfmathprintnumber{\pgfmathresult}\,K
},
scaled y ticks=false,
]
\addplot +[blue,mark=none] table [x=iter, y=prod, col sep=semicolon] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}
现在,当我取消注释该行时scaled x ticks=false,
,我收到此错误:
! Dimension too large.
<to be read again>
\relax
l.50 \end{axis}
?
! Emergency stop.
<to be read again>
\relax
l.50 \end{axis}
! ==> Fatal error occurred, no output PDF file produced!
Transcript written on build/mvp.log.
此错误消息似乎与除以零有关。由于我设置的分母为,1000
我不明白这可能是什么原因。因此,我不知道为什么此方法适用于 y 轴,但不适用于 x 轴。有人能指出我做错了什么吗?
更新:轴scaled ticks=base 10:-3,
答案1
的文档\pgfmathparse
给出了答案:
pgf 中的数学引擎通常使用 TEX 的内部算法。这意味着:它非常适合 [−16384, 16384] 范围内的数字,并且精度为 5 位
数字范围通常对于绘图应用程序来说太小。pgfplots 通过
\pgfkeys{/pgf/fpu}\pgfmathparse{1+41}
激活“浮点单元”(fpu)并以浮点形式应用所有后续操作来扩大数字范围。
添加\pgfkeys{/pgf/fpu}
到我的块中xticklabel
并yticklabel
允许进行按照我想要的方式渲染轴所需的计算。