![如何缩放 pgfplots 中现有的坐标数据?](https://linux22.com/image/275900/%E5%A6%82%E4%BD%95%E7%BC%A9%E6%94%BE%20pgfplots%20%E4%B8%AD%E7%8E%B0%E6%9C%89%E7%9A%84%E5%9D%90%E6%A0%87%E6%95%B0%E6%8D%AE%EF%BC%9F.png)
我有一个包含其数据的图,例如
\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}