Polaraxis를 사용하여 곡선 간 음영 처리

Nov 29 2020

I가 사용하고 pgfplots상기 방정식을 플롯 r=1하고 r=1-sin(\x/2),하지만 곡선 음영에 의해 형성되는 3 개 개의 영역을 부탁합니다. 2 개의 다른 TeX.SX 게시물에 연결 fill between되는 polaraxis환경 에서 사용 하는 것에 대해 묻는이 버그 보고서에 대한 링크를 찾았습니다.https://github.com/pgf-tikz/pgfplots/issues/124

이 게시물은 원점을 포함하는 영역을 음영 처리합니다. pgfplots에서 두 극 방정식의 그래프 사이 음영

이 게시물은 axis환경 대신 환경을 사용 polaraxis합니다. 두 극 곡선 사이의 영역 음영 처리

작업중인 코드는 다음과 같습니다.

\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{polar, fillbetween}
\pgfplotsset{compat=newest}

\begin{document}
  \begin{tikzpicture}[scale=1]
    \begin{polaraxis}
      [
      domain=0:360,
      samples=180,
      grid=both,
      grid style={line width=0.1pt, draw=gray!75},
      major grid style={black}, 
      minor x tick num=3,
      minor y tick num=3,
      xmin=0, xmax=360,
      ymin=0, ymax=2.25,
      xtick={0,45,...,360},
      xticklabels={},
      ytick={3},
      yticklabel style={anchor=north},
      ]
      \addplot[draw=red, domain=0:720] {1-sin(\x/2)};
      \addplot[draw=blue, domain=0:360] {1};
    \end{polaraxis}
  \end{tikzpicture}
\end{document}

답변

5 Noname Nov 29 2020 at 07:10

매우 정교하지는 않지만 작동하는 방법이 있습니다.

\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{polar, fillbetween}
\pgfplotsset{compat=newest}
\makeatletter
\tikzset{reuse path/.code={\pgfsyssoftpath@setcurrentpath{#1}}}
\makeatother

\begin{document}
  \begin{tikzpicture}[scale=1]
  \pgfplotsset{set layers}
    \begin{polaraxis}
      [axis on top,
      domain=0:360,
      samples=180,
      grid=both,
      grid style={line width=0.1pt, draw=gray!75},
      major grid style={black}, 
      minor x tick num=3,
      minor y tick num=3,
      xmin=0, xmax=360,
      ymin=0, ymax=2.25,
      xtick={0,45,...,360},
      xticklabels={},
      ytick={3},
      yticklabel style={anchor=north},
      ]
      \addplot[draw=red, domain=0:720,save path=\RedPath] {1-sin(\x/2)};
      \addplot[draw=blue, domain=0:360,save path=\BluePath] {1};
      \pgfonlayer{axis background}
       \fill[blue!20,reuse path=\BluePath];
       \fill[red!20,even odd rule,reuse path=\RedPath];
       \clip[reuse path=\BluePath];
       \fill[cyan!20,even odd rule,reuse path=\RedPath];
      \endpgfonlayer
    \end{polaraxis}
  \end{tikzpicture}
\end{document}