![极端 pgfplots - 提高 3d 极坐标图分辨率并防止“超出 TeX 容量”](https://linux22.com/image/298996/%E6%9E%81%E7%AB%AF%20pgfplots%20-%20%E6%8F%90%E9%AB%98%203d%20%E6%9E%81%E5%9D%90%E6%A0%87%E5%9B%BE%E5%88%86%E8%BE%A8%E7%8E%87%E5%B9%B6%E9%98%B2%E6%AD%A2%E2%80%9C%E8%B6%85%E5%87%BA%20TeX%20%E5%AE%B9%E9%87%8F%E2%80%9D.png)
因此,我制作了这张描述天线辐射方向图的 3D 极坐标图,该图使用从模拟程序导出的数据生成。中间的尖峰是辐射方向图的主要特征,但它应该更圆形。
这是因为最大角度分辨率为 3 度(x 轴和 y 轴以度为单位)。较小的分辨率(2 度或 1 度)会导致错误TeX capacity exceeded
。
然而,我很乐意仅在峰值附近(-15 <phi,theta <15)提高分辨率,但我正在努力处理数据文件。
MWE 如下:
\documentclass{standalone}
\usepackage{pgfplots,siunitx}
\usepgfplotslibrary{dateplot,polar,units,external}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
colorbar,
data cs=polar,
ymin=-50, ymax=50,
xmin=-50, xmax=50,
zmin=0, zmax=31,
xlabel={$\phi$},
x unit=\si{\degree},
ylabel={$\theta$},
y unit=\si{\degree},
zlabel={Directivity},
z unit=\si{\dB},
point meta min=0, point meta max=31,
unit vector ratio*=1 1 2,
z buffer=sort,
view={45}{30},
width=20cm
]
\addplot3[surf, fill=white, mesh/ordering=y varies, mesh/rows=61] %
table[x index={1},y index={0},z index={2}]{8x8-ful-arr-good-3.txt};
\end{axis}
\end{tikzpicture}
\end{document}
数据文件为:
我正在寻找一种方法来使用 pgfplots 改进所需区域的绘图。有没有办法合并这两个文件?
答案1
x filter
您可以通过和/或过滤掉不需要的点y filter
。为了保持网格结构完整,您必须遵守以下两项:
- 确保你分配
unbounded coords=jump
- 确保应该丢弃的点收到“nan”(并且不是空值)。
违反其中任何一项都会破坏网格结构。
以下是我得到的结果:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
data cs=polar,
% ymin=-180, ymax=180,
% xmin=-180, xmax=180,
% zmin=-20, zmax=11,
% unit vector ratio*=1 1 10,
z buffer=sort,
view={45}{30},
width=15cm,
x filter/.code={%
% PHI:
\ifdim-15pt>#1pt
\def\pgfmathresult{nan}%
\fi
},
y filter/.code={%
% THETA
\ifdim#1pt>15pt
\def\pgfmathresult{nan}%
\fi
},
unbounded coords=jump,
]
\addplot3[surf, fill=white, mesh/ordering=y varies, mesh/rows=37] table[x index={1},y index={0},z index={2}]{polar.dat};
\end{axis}
\end{tikzpicture}
\end{document}
一些说明:
- 我使用了你的数据文件Pgfplots 在极坐标图中关闭路径。
- 似乎
x filter
没有效果...您可能需要根据您的数据文件调整这些内容。 - 我的示例中的过滤器通过 TeX 基元(即 )工作
\ifdim<dimension1> <operation> <dimension2>
。由于此上下文中的数字没有维度,因此我必须人为地添加“pt”。这种方法限制了准确性和数字范围 < 16384,但它适用于此图片。 \if<condition> \else \fi
是条件的 TeX 原语,并\def\pgfmathresult{nan}
用“nan”覆盖结果。- 某个切片上有一个洞,我怀疑你的条件“ (-15 < phi, theta < 15)”可能需要一些修改 - 要么是因为我使用了错误的数据文件,要么是因为它确实需要不同的参数。
参考文献:参见 pgfplots 手册,尤其是的文档unbounded coords
。