有没有办法利用轴或点的对称性pgfplot
?
那么您只需定义坐标的一半或四分之一?
例如做这样的事情:
更省力?
带有“一个季度”数据(表格)的示例代码应进行“镜像”以实现类似上图的效果:
\usepgfplotslibrary{polar}
%%%% for speed only: %%%%%%
\usepgfplotslibrary{external}
\tikzexternalize
\tikzsetexternalprefix{tikz-fig-precomp-cache/}
%%%%%%%%%%
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{polaraxis}[
xticklabel=$\pgfmathprintnumber{\tick}^\circ$,
ymin=0,
ymax=0.7]
\addplot [smooth, color=blue]
table{
90 0.4
30 0.45
0 0.47
};
\end{polaraxis}
\end{tikzpicture}
\caption{Polar}
\end{figure}
答案1
这应该可以解决极坐标图的问题。在 TikZ 中(因此在 pgfplots 中),可以通过后处理和预处理将相同的 poth 重复用于不同的目的。然后,在某处捕捉和挤压额外的转换只是一个时间问题。
我定义了(主要是从原版中窃取的)一种简单的使用风格,需要一些路径绘制规范和 x 比例和 ay 比例
mirrored postaction=<path action> via <xscale> and <yscale>
请将此作为起点,并根据您的需要进一步修改。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepgfplotslibrary{polar}
\makeatletter
\def\tikz@extra@mirr@red@postaction#1#2#3{%
{%
\pgfsys@beginscope%
\pgflowlevel{%
\pgftransformxscale{#2}%
\pgftransformyscale{#3}}%
\setbox\tikz@figbox=\box\pgfutil@voidb@x%
\tikz@restorepathsize%
\path[#1]\pgfextra{\pgfsyssoftpath@setcurrentpath\tikz@actions@path};
\pgf@resetpathsizes%
\pgfsys@endscope%
}%
}
\tikzset{mirrored postaction/.code args={#1 via #2 and #3}{%
\expandafter\def\expandafter\tikz@postactions\expandafter{%
\tikz@postactions\tikz@extra@mirr@red@postaction{#1}{#2}{#3}
}
}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{polaraxis}[
xticklabel=$\pgfmathprintnumber{\tick}^\circ$,
ymin=0,
ymax=0.7]
\addplot [smooth, color=blue,
mirrored postaction=draw via 1 and -1,
mirrored postaction={ultra thick,dashed,draw} via -1 and 1,
mirrored postaction={ultra thin,red,fill} via -1 and -1,]
table{
90 0.4
80 0.7
70 0.6
60 0.8
50 1.5
30 0.45
10 -0.1
0 0.47
};
\end{polaraxis}
\end{tikzpicture}
\end{document}
这里我使用了三次相同的路径,但使用了不同的绘图规范和红色填充。从这个例子中可以看出,您可以多次调用后续操作和预操作。
在你的例子中结果变成
您甚至可以将这三种镜像的后动作样式嵌入到一种样式中,使其更加方便。