这有多小?

这有多小?

我使用 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

什么时候正在排版标签,这些数字将会转换回数据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。

相关内容