如何缩放 pgfplots 中现有的坐标数据?

如何缩放 pgfplots 中现有的坐标数据?

我有一个包含其数据的图,例如

\documentclass[]{article}
\usepackage[]{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[]
\addplot+[%multiply x data by a factor here, multiply y data by another factor
] plot[] coordinates{
 ( 1, 2 )
 ( 2, 3 )
 ( 3, 4 )
};
\end{axis}
\end{tikzpicture}
\end{document}

但我想pgfplots对数据应用转换(以每个图为基础)。

绘图之前如何缩放(或更一般地转换)数据?

如果可能的话,这应该适用于,并且是或 的coordinates一个选项。addplot[...]plot[...]

我尝试过,x coord trafo/.code={\pgfmathparse{#1*scalefactor}\pgfmathresult},但这似乎只对整个轴有效,而不对图中的每条曲线有效。

效果应该和上面的例子一样:

...
coordinates{
 ( 100., 0.2 )
 ( 200., 0.3 )
 ( 300., 0.4 )
};
...

答案1

您可以使用 来x filter/.code根据每个图转换 x 坐标。如果您使用\addplot table而不是 ,这也有效\addplot coordinates

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot+[
    x filter/.code={\pgfmathparse{#1*100}\pgfmathresult},
    y filter/.code={\pgfmathparse{#1*10}\pgfmathresult}
    ] coordinates{
 ( 1, 2 )
 ( 2, 3 )
 ( 3, 4 )
};
\end{axis}
\end{tikzpicture}
\end{document}


如果您可以以表格形式而不是坐标列表的形式提供数据,事情会变得更加舒服,因为您可以简单地使用x expr=\thisrow{X} * 100, y expr=\thisrow{Y} * 10

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table [x expr=\thisrow{X}*100, y expr=\thisrow{Y}*10] {
 X Y
 1 2
 2 3
 3 4
};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容