Странное заполнение между поведением

Странное заполнение между поведением

Я только что начал использовать библиотеку Fill Between, и она очень полезна, но признаю, что иногда она для меня становится черным ящиком.

Например, если я хочу заполнить пространство, ограниченное y=x^2 и y=2-x^2 (то есть обрезать заливку до значения между -1 и 1), то изначально я пробовал это.

BadFillBetween

Затем я просто добавил одно небольшое изменение (уменьшил ymin совсем немного) и получил то, что хотел. Может кто-нибудь объяснить, что происходит?

GoodFillBetween

Код, который я использовал для первой картинки, приведен ниже. Чтобы получить вторую картинку, установите ymin=-.1 вместо ymin=0. Я также заметил, что если вы избавитесь от мягкого клипа в заполнении между ними, то получите следующую картинку, которая имеет смысл для меня. Так что, должно быть, что-то с мягким клипом, который был испорчен.

ХорошоЗаполнитьМежду

\documentclass{standalone}
\usepackage{tikz,pgfplots}
\usepgfplotslibrary{fillbetween}
 \pgfplotsset{compat=1.3}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
    xmin=-2,xmax=2,
    ymin=0,ymax=4,
    height = 6cm,
    minor tick num=1,
    axis lines=center,
    axis line style=<->]
   \addplot[name path=F,blue,domain={-2:2}] {-x^2+2};
   \addplot[name path=G,green,domain={-2:2}] {x^2};    
   \addplot[color=brown!50]fill between[of=F and G, soft clip={domain=-1:1}];
  \end{axis}
\end{tikzpicture}
\end{document}

решение1

Область, которую нужно заполнить, можно определить с помощью soft clip={(-1,-1) rectangle (1,4)}. Это определяет область обрезки с помощью прямоугольника, ограниченного левой координатой (-1-1)и правой координатой (1,4). Чтобы избежать размещения заливки поверх осей, axis on topнеобходимо добавить к параметрам осей. tikzБиблиотека шаблонов используется для заполнения области с помощью pattern=north east lines.

Вот результат:

введите описание изображения здесь

Это МВЭ:

\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{patterns}
\pgfplotsset{compat=1.15}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
        xmin=-2,xmax=2,
        ymin=0,ymax=4,
        height = 6cm,
        minor tick num=1,
        axis lines=center,
        axis line style=<->,
        axis on top
    ]
  \addplot[name path=G,green,domain={-2:2}] {x^2};    
  \addplot[name path=F,blue,domain={-2:2}] {-x^2+2};
  \addplot[pattern=north east lines] fill between [
  of=F and G, 
  soft clip={(-1,-1) rectangle (1,4)}
  ];

  \end{axis}
\end{tikzpicture}

\end{document}

решение2

В руководстве pgf решение описывается следующим образом:

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

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
        xmin=-2,xmax=2,
        ymin=0,ymax=4,
        height = 6cm,
        minor tick num=1,
        axis lines=center,
        axis line style=<->
    ]

   \addplot[name path=G,green,domain={-2:2}] {x^2};    
   \addplot[name path=F,blue,domain={-2:2}] {-x^2+2};
%  \addplot[color=blue!50]fill between[of=G and F, split, clip={domain=-1:1}];

   \tikzfillbetween [of=F and G,split,every even segment/.style={white!1}] {red!50};

  \end{axis}
\end{tikzpicture}

\end{document}

Полагаю, проблема с осью нежелательна, но я уверен, что переопределение можно как-то решить.

введите описание изображения здесь

Связанный контент