我目前正在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}