
Я только что начал использовать библиотеку Fill Between, и она очень полезна, но признаю, что иногда она для меня становится черным ящиком.
Например, если я хочу заполнить пространство, ограниченное y=x^2 и y=2-x^2 (то есть обрезать заливку до значения между -1 и 1), то изначально я пробовал это.
Затем я просто добавил одно небольшое изменение (уменьшил ymin совсем немного) и получил то, что хотел. Может кто-нибудь объяснить, что происходит?
Код, который я использовал для первой картинки, приведен ниже. Чтобы получить вторую картинку, установите 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}
Полагаю, проблема с осью нежелательна, но я уверен, что переопределение можно как-то решить.