
Итак, у меня есть этот 3D полярный график, описывающий диаграмму направленности антенны, сгенерированный с помощью данных, экспортированных из программы моделирования. Пик в середине — это главная особенность диаграммы направленности, но он должен быть болееокруглый.
Это вызвано тем, что максимальное угловое разрешение составляет 3 градуса (оси x и y указаны в градусах). Меньшее разрешение (2 или 1 градус) приводит к ошибке TeX capacity exceeded
.
Тем не менее, я был бы рад улучшить разрешение только вблизи пика (-15 < фи, тета < 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 < фи, тета < 15)» может нуждаться в некоторой модификации — либо потому, что я использовал неправильный файл данных, либо потому, что для него действительно нужны другие аргументы.
Ссылки: см. руководство pgfplots, особенно документацию по unbounded coords
.