我知道如何手动指定刻度。但是如果您有多个图,那么这项工作就太繁重了。我正在寻找一种自动执行此操作的方法。我想指定的是轴的刻度数。有没有办法只说明您想要多少个刻度?我读过“尝试最小刻度=3”并尝试过“尝试最大刻度=3”,但那太简单了……
编辑:图
这是我喜欢的 y 轴上有 5 个刻度的图形。
答案1
刻度放置算法的工作原理是确定轴的范围,将其除以距离max space between ticks
以获得所需的刻度数,然后选择步长 1、0.5、0.2 或 0.1 乘以上限的数量级(因此,如果最大值是 0.4,则为 0.1、0.05、0.02 或 0.01;如果最大值是 400,则为 100、50、20 或 10)。
因此实际上,max space between ticks
用于指定要使用的刻度数,但并非所有步长都允许。目前,无法为不同的轴单独指定此值(功能请求?)。
如果您想要获得 0.25 的步长以便在示例中获得 5 个刻度,则必须调整内部宏(或打开功能请求)。将以下块放入您的序言中将允许步长为 0.25(或 2.5、25 等)
\makeatletter
\def\pgfplots@assign@default@tick@foraxis@normalizetickdist#1#2{%
\begingroup
\let\H=\pgf@xb
\expandafter\pgfmathfloat@decompose#2\relax\pgfmathfloat@a@S\H\pgfmathfloat@a@E
% modify the mantisse:
\ifdim\H<2pt
\ifdim\H<1.5pt
\H=1.0pt
\else
\H=2.0pt
\fi
\else
\ifdim\H<4.9999pt
\ifdim\H<2.25pt
\H=2.0pt\relax
\else
\ifdim\H<3.75pt
\H=2.5pt\relax
\else
\H=5.0pt\relax
\fi
\fi
\else
\ifdim\H<7.5pt
\H=5.0pt\relax
\else
\H=1.0pt\relax
\advance\pgfmathfloat@a@E by1
\fi
\fi
\fi
\pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\pgf@sys@tonumber{\H}}{\the\pgfmathfloat@a@E}%
\pgfmath@smuggleone\pgfmathresult
\endgroup
}%