
Então eu tenho esse gráfico polar 3D descrevendo o padrão de radiação de uma antena, gerado com os dados exportados do programa de simulação. O pico no meio é a principal característica do padrão de radiação, mas deveria ser maisarredondado.
Isto é causado pelo fato de que a resolução angular máxima é de 3 graus (os eixos x e y estão em graus). Uma resolução menor (2 ou 1 grau) causa o TeX capacity exceeded
erro.
No entanto, ficarei feliz em melhorar a resolução apenas nas proximidades do pico (-15 <phi, theta <15), mas estou tendo dificuldades com os arquivos de dados.
O MWE é o seguinte:
\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}
e os arquivos de dados são:
Estou procurando uma forma de melhorar o gráfico na região desejada usando pgfplots. Existe uma maneira de combinar os dois arquivos?
Responder1
Você pode filtrar pontos desnecessários por meio de x filter
e/ou y filter
. Para manter a estrutura da malha intacta, é necessário respeitar dois itens:
- certifique-se de atribuir
unbounded coords=jump
- certifique-se de que os pontos que devem ser descartados recebam "nan" (enãoum valor vazio).
A violação de qualquer um desses itens destruiria a estrutura da malha.
Aqui está o que eu recebo:
\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}
Algumas notas:
- Eu usei seu arquivo de dados dePgfplots fecha caminhos no gráfico polar.
- Parece
x filter
não ter efeito ... você pode querer ajustar essas coisas com base no seu arquivo de dados. - Os filtros no meu exemplo funcionam por meio de primitivas TeX, ou seja, por meio de
\ifdim<dimension1> <operation> <dimension2>
. Como os números neste contexto não têm dimensão, tenho que acrescentar “pt” artificialmente. Essa abordagem restringiu a precisão e o intervalo de números <16384, mas funciona para esta imagem. \if<condition> \else \fi
é a primitiva TeX para condicionais e\def\pgfmathresult{nan}
substitui o resultado por "nan".- Há um buraco em alguma fatia e suspeito que sua condição "(-15 <phi, theta <15)" possa precisar de alguma modificação - seja porque usei o arquivo de dados errado ou porque ele realmente precisa de argumentos diferentes.
Referências: consulte o manual do pgfplots, especialmente a documentação do unbounded coords
.