我使用 PGFPlots 构建了一个图,我告诉它每 10 个单位显示一个轴号,但出于某种原因,它没有为此选择合理的整数,而是默认为 109.99、119.99、129.99 等数字。有什么办法可以让它使用 110、120、130 等数字吗?我不想简单地更改精度,因为这不会改变数字的实际值,只会改变它的显示方式,从而引入系统错误。如果需要,请在下面提供图像代码。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xlabel={x},ylabel={y},
xtick distance=4,minor x tick num=3,
ytick distance=10,minor y tick num=9,
width=12.5cm,height=11.69213cm,
scale only axis=true,
enlargelimits=false,
scaled ticks=false,]
\addplot graphics[xmin=37477.82905, xmax=37501.72688, ymin=37407.02447, ymax=37509.41263,] {example-image};
\end{axis}
\end{tikzpicture}
\end{document}
编辑我已成功实现所需的行为,方法是将以下行添加到轴代码中,该代码明确指出了每个 y 轴数字应位于何处。我现在的问题是,为什么pgfplots
选择这些数字不是最明智的选择,有没有更简单的方法可以做到这一点?
ytick={37400,37410,37420,37430,37440,37450,37460,37470,37480,37490,37500,37510},
答案1
坏消息:刻度的位置由 计算\pgfplots@assign@default@tick@foraxis
,然后存储\pgfplots@#1tick
在轴 cs 中。也就是说,37400,37410,...,37510
存储的不是 ,而是-1.70305,-0.70305,...,10.73982
。
什么时候pgf图正在排版标签,这些数字将会转换回数据cs,并且会产生舍入误差。
除非发生下列情况之一,否则此错误是不可避免的:
- 你可以提高FPU的精度;或者
- 您可以重新设计界面以便
\pgfplots@ytick
容纳37400,37410,...,37510
而不是-1.70305,-0.70305,...,10.73982
。
否则,正如@percusse 提到的,唯一的机会就是改变精度并假装它不存在。
正如@Torbjørn T 提到的,相对误差是 (37409.99-37410)/37410 = -0.000000267308206,这是 FPU 的极限。
这有多小?
假设axis
高度为10cm,那么10cm的0.0000003就是0.000003cm,或者0.00003mm,或者0.03μm,或者30nm。
对于 iMac 5k(27 英寸屏幕),每个像素为 133945nm。
对于 2400 dpi 的打印机,每个点是 10583nm。
如果你\draw(0,0)rectangle(10,10)
,这个正方形的边长将是283.4681bp,比它应该的边长大1246nm。
你猜怎么着,可见光的波长至少为 380nm。