如何使 pgfplots 遵循旋转图形沿轴的非旋转边界?

如何使 pgfplots 遵循旋转图形沿轴的非旋转边界?

我正在尝试旋转一个简单的高斯,但是当我尝试旋转图形时,很明显只是pgfplots裁剪图形以匹配指定的边界:

在此处输入图片描述

上图显示了两个图形,一个是蓝色的,没有旋转。该图形具有正确的边界,x 介于 0 和 5 之间。

另一个橙色图表被旋转了。旋转后图表被裁剪了。我希望反转这个顺序,这样我就可以获得蓝色图表的形状,像橙色图表一样旋转。

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}


\pgfmathdeclarefunction{gauss}{2}{%
  \pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}

\begin{document}
\begin{tikzpicture}[xscale=1,>=latex,
    declare function={
        normal(\m,\s)=1/(2*\s*sqrt(pi))*exp(-(x-\m)^2/(2*\s^2));
    }
]
\begin{axis}[
    axis lines=none,
    samples=30,
    xmin=0,xmax=5,
    domain=-5:5,
    area plot/.style={
        fill opacity=0.75,
        draw=none,
        fill=orange,
        mark=none,
        smooth
    }
]
\addplot [area plot,rotate=25,yshift=-50,xshift=50]  {normal(0,1)};
\addplot [area plot]  {normal(0,1)};
\end{axis}
\end{tikzpicture}

\end{document}

答案1

tikzpicture 仍然是 tikzpicture。因此您可以对其应用转换。

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\pgfmathdeclarefunction{gauss}{2}{%
  \pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}

\begin{document}
\begin{tikzpicture}[>=latex,rotate around={50:(0,0)},% <-- Here
    declare function={normal(\m,\s)=1/(2*\s*sqrt(pi))*exp(-(x-\m)^2/(2*\s^2));}
]
\begin{axis}[
    axis lines=none,
    samples=30,
    xmin=0,xmax=5,
    domain=-5:5,
    area plot/.style={
        fill opacity=0.75,
        draw=none,
        fill=orange,
        mark=none,
        smooth
    }
]
\addplot [area plot]  {normal(0,1)};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

TiKZ's plot我不知道坐标之间的关系,pgfplots所以结果不一样。但你不需要使用pgfplots来绘制像你的例子那样的东西,只需一个fillplot足够了,不用担心裁剪区域。

\documentclass[border=3mm,tikz]{standalone}

\begin{document}
\begin{tikzpicture}[declare function={%
    gauss(\x)=1/(sqrt(2*pi))*exp(-(\x)^2/2);},]

\fill[color=orange, fill opacity=.75] (0,0) --plot[ domain=0:5] (\x,{gauss(\x)}) -- cycle;

\fill[color=blue, fill opacity=.75,yshift=5mm, xshift=5mm, rotate=25 ] (0,0) -- plot[ domain=0:5] (\x,{gauss(\x)}) -- cycle;

\fill[color=red, fill opacity=.75,yshift=5, xshift=5mm, rotate=50] (0,0) -- plot[ domain=0:5] (\x,{gauss(\x)}) -- cycle;
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

一种不切实际的方法是将 嵌入到tikzpicturerotatebox,然后使 tikzpicture 成为另一个 内的节点tikzpicture

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}


\pgfmathdeclarefunction{gauss}{2}{%
  \pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}

\begin{document}
\begin{tikzpicture}

\node at (0,0){\rotatebox{45}{\begin{tikzpicture}[xscale=1,>=latex,
    declare function={
        normal(\m,\s)=1/(2*\s*sqrt(pi))*exp(-(x-\m)^2/(2*\s^2));
    }
]
\begin{axis}[
    axis lines=none,
    samples=30,
    xmin=0,xmax=5,
    domain=-5:5,
    area plot/.style={
        fill opacity=0.75,
        draw=none,
        fill=orange,
        mark=none,
        smooth
    }
]
%\addplot [area plot,rotate=25,yshift=-50,xshift=50]  {normal(0,1)};
\addplot [area plot,fill=blue]  {normal(0,1)};
\end{axis}
\end{tikzpicture}}};

\end{tikzpicture}

\end{document}

相关内容