我已经根据表格 (xy 数据) 创建了一个简单的 2D 图,现在我想平移和缩放 x 轴。 (我宁愿不缩放实际数据,只缩放轴)。
举个例子,假设 x 值介于 (a,b) 之间,而我现在想让它们介于 (0,1) 之间。我该怎么做?我找到了一个关于如何减去常数的示例,但我无法让它与乘法一起使用。任何帮助都将不胜感激。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[scaled x ticks=manual:{}{%
\pgfmathfloatcreate{1}{6.0}{0}%
\pgfmathfloatsubtract{#1}{\pgfmathresult}%
}]
\addplot coordinates {
(6, 2)
(8, 3)
};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
您可以使用 ,在一个命令中执行减法和除法scaled x ticks=manual:{}{\pgfmathparse{ (#1 - 6) / 2 } }
。
如果你想让它更舒服一点,你可以使用以下方式定义一种新风格
\pgfplotsset{
normalise/.style 2 args={
scaled x ticks=manual:{}{%
\pgfmathparse{ ( ##1 - (#1) ) / (#2 - #1) }%
}
}
}
然后您可以调用normalise={<lower>}{<upper>}
选项axis
来使刻度标准化。
请注意,这只会缩放每个刻度标签,这意味着您最终可能会得到不雅的刻度位置(尝试在 6 到 9 之间进行标准化)。
我建议对坐标本身进行规范化。您可以使用 而不是x filter/.code
来执行此scaled x ticks
操作。这将改变坐标本身,而不仅仅是刻度标签。这意味着确定要显示哪些刻度位置的算法可以与缩放坐标一起使用,这通常会产生更好的结果:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\pgfplotsset{
normalise/.style 2 args={
x filter/.code={%
\pgfmathparse{ ( ##1 - (#1) ) / (#2 - #1) }%
}
}
}
\begin{axis}[
normalise={6}{9}
]
\addplot coordinates {
(6, 2)
(8, 3)
(9,1)
};
\end{axis}
\end{tikzpicture}
\end{document}
为了进行比较,以下是您使用时获得的输出scaled x ticks
。请注意,有 7 个刻度标签,而不是 6 个:
答案2
我认为规范化相当容易,但你可以手动设置和命名刻度,例如从A到埃,[A:埃]:
\begin{axis}[xtick={a,b,c,d,e},
xticklabels={0, 0.25, 0.5, 0.75, 1},
]