我尝试通过指定以下方式在 pgfplots 极坐标图中使用对数 Y 轴ymode=log
:
\documentclass[]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{polaraxis}[
ymode=log, ymin=0, ymax=70,
ytick=\empty, axis y line=none,
xticklabel=$\pgfmathprintnumber{\tick}^\circ$,
nodes near coords style={font=\footnotesize},
nodes near coords=\pgfmathprintnumber{\pgfplotspointmeta}\%,
visualization depends on={x\as\myx},
nodes near coords style={anchor=\myx-180},
]
\addplot+ [polar comb, green, line width=3pt, mark=none, ->]
coordinates {(0,21.6) (180,15.8)};
\addplot+ [polar comb, red, line width=3pt, mark=none, ->]
coordinates {(90,11.4) (270,10.6)};
\addplot+ [mark=none, ->, polar comb, blue, line width=3pt]
coordinates {(30,5.3) (60,5.5) (120,4.0) (150,6.6) (210,5.2) (240,5.5) (300,3.4) (330,5.2)};
\end{polaraxis}
\end{tikzpicture}
\end{document}
问题:
- 标签(坐标附近的节点)也显示为对数值。我只想要 y 轴的对数刻度,保持显示的 y 值不变。
- 许多与浮点相关的错误(见下页)::PGF 软件包数学错误:抱歉,浮点单元的内部例程得到一个格式错误的浮点数“2.75998000000000”。不可读部分位于“2.75998000000000”附近。
答案1
我相信您可以充分利用point meta
、y coord trafo
和y coord inv trafo
键。
y coord trafo
并y coord inv trafo
可以对原始坐标应用变换y
,以修改实际绘图坐标和相关刻度标签。这将在pgfplots
手动的4.21 节符号坐标和用户变换。
基本上发生的事情是
y coord trafo/.code = {<expression>}
获取输入y
坐标并<expression>
使用它们进行解析;y coord inv trafo/.code = {<inv expression>}
采用前一次解析的结果并进行解析<inv expression>
;point meta = <setting>
pgfplotspointmeta
根据 的值设置 的值<setting>
。由于您对值感兴趣y
,因此您可以选择<setting>=y
,但由于y
坐标已解析,这实际上会导致错误的输出,因此您可以选择rawy
与实际未处理的y
值相对应的值。
以下是代码
\documentclass[]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{polaraxis}[
ymin=1, ymax=70,
xticklabel=$\pgfmathprintnumber{\tick}^\circ$,
point meta ={rawy},
y coord trafo/.code =\pgfmathparse{log10(#1)},
y coord inv trafo/.code=\pgfmathparse{10^#1},
nodes near coords style={font=\footnotesize},
nodes near coords=\pgfmathprintnumber\pgfplotspointmeta\%,
visualization depends on={x\as\myx},
nodes near coords style={anchor=\myx-180},
]
\addplot+ [polar comb, green, line width=3pt, mark=none, ->]
coordinates {(0,21.6) (180,15.8)};
\addplot+ [polar comb, red, line width=3pt, mark=none, ->]
coordinates {(90,11.4) (270,10.6)};
\addplot+ [mark=none, ->, polar comb, blue, line width=3pt]
coordinates {(30,5.3) (60,5.5) (120,4.0) (150,6.6) (210,5.2) (240,5.5) (300,3.4) (330,5.2)};
\end{polaraxis}
\end{tikzpicture}
\end{document}
还有输出。我刚刚删除了隐藏 y 轴的设置,以便您看到刻度标签上的效果。