Extreme pgfplots -- 3D 極座標プロットの解像度を改善し、「TeX 容量超過」を防止します

Extreme pgfplots -- 3D 極座標プロットの解像度を改善し、「TeX 容量超過」を防止します

シミュレーションプログラムからエクスポートされたデータから生成された、アンテナの放射パターンを表す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 を使用して、目的の領域のプロットを改善する方法を探しています。 2 つのファイルを結合する方法はありますか?

答え1

x filterおよび/またはを使用して、不要なポイントを除外できますy filter。メッシュ構造をそのまま維持するには、次の 2 つの項目を考慮する必要があります。

  1. 必ず割り当ててくださいunbounded coords=jump
  2. 破棄されるべきポイントには「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}

ここに画像の説明を入力してください

いくつかの注意点:

  1. 私はあなたのデータファイルを使用しましたPgfplots は極座標プロットでパスを閉じます
  2. 効果x filterがないようです...データ ファイルに基づいて調整する必要があるかもしれません。
  3. 私の例のフィルタは、TeX プリミティブ、つまり によって機能します\ifdim<dimension1> <operation> <dimension2>。このコンテキストの数値には次元がないため、人工的に「pt」を追加する必要があります。このアプローチでは精度が制限され、数値の範囲は 16384 未満ですが、この図では機能します。
  4. \if<condition> \else \fi条件文の TeX プリミティブであり、\def\pgfmathresult{nan}結果を「nan」で上書きします。
  5. いくつかのスライスに穴があり、条件「(-15 < phi, theta < 15)」に何らかの修正が必要であると思われます。これは、間違ったデータ ファイルを使用したか、実際に異なる引数が必要であるかのいずれかが原因です。

参考資料: pgfplots のマニュアル、特に のドキュメントを参照してくださいunbounded coords

関連情報