
Ich habe folgendes:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{mathtools}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{patterns}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines = middle,
xlabel = $x$,
ylabel = {$\begin{aligned}
\color{blue} f(x)& \color{blue}=1\\
\color {red} g(x)& \color{red}=|x|
\end{aligned}$}
]
\addplot [
name path = A,
domain=-2:2,
color=blue,
]
{1};
\addplot [
name path = B,
domain=-2:2,
color=red,
]
{abs(x))};
\addplot [
pattern=north west lines,
]
fill between [
of=A and B,
soft clip={domain=-1:1}
];
\end{axis}
\end{tikzpicture}
\end{document}
die ich in einem Bereich beschatten möchte, der begrenzt ist zwischen
f(x) = 1
Und
g(x) = |x|
Stattdessen wird jedoch Folgendes angezeigt:
Das Diagramm wird gezeichnet, aber der Bereich ist nicht schattiert. Ich habe versucht, die beiden Funktionen durch alternative zu ersetzen, und es funktioniert, daher bin ich mir nicht ganz sicher, was hier das Problem ist. (Ich verwende ShareLaTex)
Antwort1
(Zur Klarstellung: Mit der Veröffentlichung von PGFPlots v1.16 liefert Ihr Beispiel das erwartete Ergebnis. Es gibt jedoch einen besseren/einfacheren Weg, um das gewünschte Ergebnis zu erzielen.)
Verwenden Sie stattdessen domain
use split
, wodurch Sie 3 Segmente erhalten, die einzeln bearbeitet werden können. Geben Sie also die allgemeine Option an, nichts auszufüllen ( fill=none
), und geben Sie dann im segment no 1
Stil „ “ das gewünschte Füllmuster an. (Die Segmente beginnen mit 0 zu zählen, deshalb ist Nummer 1 die Nummer, die Sie hier benötigen/möchten.)
% used PGFPlots v.1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{amsmath}
\usetikzlibrary{
patterns,
pgfplots.fillbetween,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=middle,
xlabel=$x$,
ylabel={
$\begin{aligned}
\color{blue} f(x)& \color{blue}=1\\
\color {red} g(x)& \color{red}=|x|
\end{aligned}$
},
]
\addplot [
name path=A,
domain=-2:2,
color=blue,
] {1};
\addplot [
name path = B,
domain=-2:2,
color=red,
] {abs(x)};
\addplot [
fill=none,
] fill between [
of=A and B,
% --------------------------------------
% the below code is what I have changed
split,
% draw only selected ones:
% every segment no 0/.style: invisible
every segment no 1/.style={
pattern=north west lines,
},
% every segment no 2/.style: invisible
];
\end{axis}
\end{tikzpicture}
\end{document}
Antwort2
Ich würde dies als einen Fehler (oder zumindest als unerwartetes Verhalten) in der fillbetween
Bibliothek von betrachten pgfplots
. Beachten Sie, dass dies nur meine persönliche Ansicht als Benutzer ist. Es kann sein, dass es einen bestimmten Grund gibt, warum es sich so verhält.
Betrachten Sie das folgende Beispiel, in dem ich alle Teile entfernt habe, die nicht erforderlich sind, um dieses Verhalten zu reproduzieren. Wie in Ihrem Beispiel wird der Bereich nicht ausgefüllt. Wenn Sie die axis lines=middle
Zeile jedoch einfach auskommentieren, wird der Bereich wie erwartet ausgefüllt.
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=middle,
domain=-2:2,
]
\addplot[name path=A,color=blue]{1};
\addplot[name path=B,color=red]{abs(x))};
\addplot[black] fill between[of=A and B,soft clip={domain=-1:1}];
\end{axis}
\end{tikzpicture}
\end{document}
Es scheint ein Problem bei der Verarbeitung des Punkts zu geben, 0
wenn Sie aktiviert haben . Eine einfache Problemumgehung besteht darin, einen von und einen separaten von axis lines=middle
zu verwenden . Alternativ können Sie die von Stefan Pinnow vorgeschlagene Methode verwenden.fill between
-1:0
0:1
split
\addplot[pattern=north west lines] fill between[of=A and B,soft clip={domain=-1:0}];
\addplot[pattern=north west lines] fill between[of=A and B,soft clip={domain=0:1}];