如何在笛卡尔网格上创建极坐标图?

如何在笛卡尔网格上创建极坐标图?

我目前正在tikzpicture使用pgfplots绘制这个极函数

\documentclass{article}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\begin{polaraxis}
    \addplot[red,domain=0:360,samples=360,smooth] (x,{sqrt(4/(cos(4*x)+3))});
\end{polaraxis}
\end{tikzpicture}

\end{document}

但是,这会将其绘制在极轴上,这在上下文中实际上没有任何意义。(它隐式定义为 x 4 + y 4 = x 2 + y 2,我只是使用极坐标来轻松绘制它。)

我怎样才能获得与 Wolfram|Alpha 显示的一样具有正确笛卡尔网格的漂亮图形?

我考虑过\begin{polaraxis}[hide axis]并附加一个\begin{axis},但这似乎需要手动对齐等。

有没有一个干净的方法来做到这一点?

答案1

您可以pgfplots使用 来判断输入实际上是在极坐标中给出的data cs=polar。 Pgfplots 会自动将其转换为输出坐标系:

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\begin{axis}[
    axis lines=center,
    axis equal image,
    enlargelimits=true,
     ]
    \addplot[data cs=polar,red,domain=0:360,samples=360,smooth] (x,{sqrt(4/(cos(4*x)+3))});
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

此键还可用于提供极轴或其他变体中的笛卡尔坐标。

答案2

x filter您可以使用和 a将极坐标转换为笛卡尔坐标y filter。如果您将它们包装成这样的样式:

\pgfplotsset{
    interpret as polar/.style={
            x filter/.code=\pgfmathparse{cos(rawx)*rawy},
            y filter/.code=\pgfmathparse{sin(rawx)*rawy}
        }
}

您只需添加interpret as polar您的\addplot选项即可:

\documentclass{article}
\usepackage{pgfplots}

\pgfplotsset{
    interpret as polar/.style={
            x filter/.code=\pgfmathparse{cos(rawx)*rawy},
            y filter/.code=\pgfmathparse{sin(rawx)*rawy}
        }
}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
            axis lines=center,
            axis equal image,
            enlargelimits=true
        ]
    \addplot[
            red, thick,
            domain=0:360,
            samples=360,
            smooth,
            interpret as polar
        ] (x,{sqrt(4/(cos(4*x)+3))});
\end{axis}
\end{tikzpicture}
\end{document}

相关内容