長方形パッチを使用して同心楕円を同心円に変換する

長方形パッチを使用して同心楕円を同心円に変換する

2 つの図を組み合わせて描画したいと思います。元のコードは次のとおりです。

\documentclass{article}

\usepackage{pgfplots}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{tkz-euclide}
%\pgfplotsset{compat=newest} %<------ Here
\pgfplotsset{compat=1.11} %<------ Or use this one

\begin{document}

\begin{center}
\begin{tikzpicture}[scale=1.5][x=1cm,y=1cm]
\begin{axis}[xtick={-5,-4,-3,-2,-1,0,1,2,3,4,5}, ytick={-5,-4,-3,-2,-1,0,1,2,3,4,5},
xmin=-5, xmax=5, ymin=-5, ymax=5, grid=major,
xlabel={Galactic longitude $\ell$ in degree},
ylabel={Galactic latitude $b$ in degree},
axis lines = left,
axis line style={->}]

 % rectangle
 \draw[blue] (0,0) circle[radius=1];
 \draw[blue] (0,0) circle[radius=2];
 \draw[blue] (0,0) circle[radius=3];
 \draw[blue] (0,0) circle[radius=4];
 \draw[blue] (0,0) circle[radius=5];
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}

同心円を描こうとしているのですが、楕円になってしまいました。これを修正するにはどうすればいいでしょうか?

2 番目の問題は、次の画像のように長方形のパッチを配置したいということです。

長方形パッチ

私は、楕円を円に変えることと、その上に長方形のパッチを配置することの 2 つに苦労しています。

答え1

以下を使用できます。

\documentclass[tikz, border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}

\begin{tikzpicture}[scale=1.5]
  \begin{axis}[
    xmin=-5, xmax=5, ymin=-5, ymax=5, grid=major,
    xtick={-5,...,5}, ytick={-5,...,5},
    unit vector ratio = 1 1,
    xlabel={Galactic longitude $\ell$ in degree},
    ylabel={Galactic latitude $b$ in degree},
    axis lines = left,
    axis line style={->},
    clip=false]

   \pgfplotsinvokeforeach {1,...,5} {
     \draw[blue] (0,0) circle[radius=#1];
   }
   \draw[green, thick, fill=white] (-5,-0.5) rectangle (5,0.5);
  \end{axis}
\end{tikzpicture}

\end{document}

スクリーンショット

ノート:

  • tikzpicture複数のオプション引数を(に渡さないでください。\begin{tikzpicture}[scale=1.5][x=1cm,y=1cm]これは誤りです。 のような引数を使用する方が適切です\begin{tikzpicture}[scale=1.5, x=1cm,y=1cm]。)

  • pgfplots互換性レベル1.11は少し古いので、1.16に上げました。\pgfplotsset{compat=newest}プロットを積極的に作業し、すべての問題を修正する場合は問題ないかもしれませんが、それから将来再コンパイルしたときにプロットが暗黙的に異なる結果を生成しないように、バージョンをハードコードする方がよいでしょう。
    本質的には、次のように言う\pgfplotsset{compat=1.16}ことを意味します。「このプロットは互換性レベル 1.16 で正常に動作することを確認しましたpgfplots。再コンパイルするたびに同じ動作をするようにしたいです。 の変更によってもたらされる潜在的な問題を修正する準備ができたときにのみ、pgfplots新しい互換性レベルに切り替えます ( のより新しいバージョンがpgfplotsリリースされたとき。現時点では 1.16 が最新です)。」

  • ループを使って\pgfplotsinvokeforeach円を描きました。

  • axis cs暗黙の座標系 (互換性レベル 1.11 以降は暗黙的)を使用して長方形を描画しました。

  • 塗りつぶしが円とグリッドをカバーするように、円の後にこれを描きました。

  • unit vector ratio = 1 1各軸の単位が同じ長さで表現されるようにオプションを使用しました(これにより、円が楕円ではなく実際の円になります)。

  • clip=false緑の四角形の左側と右側がトリミングされないようにします (そうでない場合は、線の幅の半分がトリミングされます。試してみてください)。

長方形パッチを描くために別の座標系を使うこともできます。これはrel axis cs座標系 rel axis csの中にpgfplots マニュアルこの場合、座標はデータ値に対応しません。代わりに、[0,1]の範囲が各プロット軸の範囲にマッピングされます(バツそしてええここでは、3D プロットでも機能します。言い換えると、緑の四角形は次のようにも描画できます。

\draw[green, thick, fill=white]
  (rel axis cs:0,0.45) rectangle (rel axis cs:1,0.55);

関連情報