Bestimmte Plotpunkte von der Glättung ausschließen

Bestimmte Plotpunkte von der Glättung ausschließen
  1. Wie schließe ich aus, dass bestimmte Koordinaten in einem PGF-Diagramm mit der Option „Glätten“ geglättet werden?
  2. Wie vermeide ich, dass es \closedcycleauf Null springt?

Hier ist mein Beispiel:

\documentclass{minimal}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}
\begin{tikzpicture} 
\begin{axis}[
axis lines=center,
xtick=\empty,
ytick=\empty,
plot a/.style={semithick,red,smooth},
plot b/.style={semithick,blue,smooth},
plot error/.style={thick,orange,smooth},
]

\addplot[plot a] coordinates {
(1.400,0.484) (1.450,0.464) (1.500,0.442) (1.550,0.419) (1.600,0.395) (1.650,0.370)
(1.700,0.346) (1.750,0.321) (1.800,0.297) (1.850,0.273) (1.900,0.249) (1.950,0.227)
(2.000,0.205) (2.050,0.185) (2.100,0.166) (2.150,0.148) (2.200,0.131) (2.250,0.116)
(2.300,0.102) (2.350,0.089) (2.400,0.077) (2.450,0.067) (2.500,0.057) };

\addplot[plot b] coordinates {
(1.400,0.111) (1.450,0.120) (1.500,0.130) (1.550,0.139) (1.600,0.150) (1.650,0.160)
(1.700,0.171) (1.750,0.183) (1.800,0.194) (1.850,0.206) (1.900,0.218) (1.950,0.230)
(2.000,0.242) (2.050,0.254) (2.100,0.266) (2.150,0.278) (2.200,0.290) (2.250,0.301)
(2.300,0.312) (2.350,0.323) (2.400,0.333) (2.450,0.343) (2.500,0.352) };

\addplot[plot error] coordinates{
(2.300,0.312) (2.250,0.301) (2.200,0.290) (2.150,0.278) (2.100,0.266) (2.050,0.254)
(2.000,0.242) (1.950,0.230) (1.946,0.2287) (1.950,0.227) (2.000,0.205) (2.050,0.185)
(2.100,0.166) (2.150,0.148) (2.200,0.131) (2.250,0.116) (2.300,0.102) } \closedcycle;

\end{axis}
\end{tikzpicture}
\end{document}

Resultierendes Diagramm

Es gibt zwei Probleme:

  1. Die linke Ecke des orangenen Dreiecks wird durch die Glättung falsch dargestellt. (Das sieht man besser, wenn man in das resultierende PDF hineinzoomt.) Ich brauche die smoothOption, dass der orangefarbene Plot dem blauen Plot (erste Hälfte) und dem roten Plot (zweite Hälfte) korrekt folgt. Aber der Punkt, an dem der orangefarbene Plot aufhört, dem blauen Plot zu folgen und anfängt, dem roten Plot zu folgen, darf nicht geglättet werden, da es sich dabei um einen nicht differenzierbaren Punkt handelt. Gibt es eine Option, wie einzelne Punkte eines Plots von der Glättung ausgeschlossen werden können?
  2. Der orangefarbene Plot wird dadurch beendet, \closedcycleweil ich die Option später verwenden möchte fill. Dadurch springt der Plot jedoch zuerst auf Null, wie man auf dem Bild sehen kann. Gibt es eine Option, einen Plot durch eine gerade Linie vom Ende zum Startpunkt abzuschließen?

Antwort1

Wenn Sie die aktuellstenpgfplotsVersion (1.10) enthält es eine neue fillbewteenBibliothek, die jeden Bereich zwischen zwei Kurven füllen kann.

Sie müssen jedem Pfad einen Namen zuweisen ( name path=) und diese Namen später verwenden, um die Bereiche dazwischen auszufüllen.

Bei dieser Lösung gibt es kein Problem mit „glatten ornicht differenzierbaren Punkten“.

\documentclass[border=3mm]{standalone}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
%\pgfplotsset{compat=1.9}
\usepgfplotslibrary{fillbetween}

\begin{document}
\begin{tikzpicture} 
\begin{axis}[
axis lines=center,
xtick=\empty,
ytick=\empty,
plot a/.style={semithick,red,smooth},
plot b/.style={semithick,blue,smooth},
plot error/.style={thick,orange,smooth},
]

\addplot[plot a, name path=A] coordinates {
(1.400,0.484) (1.450,0.464) (1.500,0.442) (1.550,0.419) (1.600,0.395) (1.650,0.370)
(1.700,0.346) (1.750,0.321) (1.800,0.297) (1.850,0.273) (1.900,0.249) (1.950,0.227)
(2.000,0.205) (2.050,0.185) (2.100,0.166) (2.150,0.148) (2.200,0.131) (2.250,0.116)
(2.300,0.102) (2.350,0.089) (2.400,0.077) (2.450,0.067) (2.500,0.057) };

\addplot[plot b, name path=B] coordinates {
(1.400,0.111) (1.450,0.120) (1.500,0.130) (1.550,0.139) (1.600,0.150) (1.650,0.160)
(1.700,0.171) (1.750,0.183) (1.800,0.194) (1.850,0.206) (1.900,0.218) (1.950,0.230)
(2.000,0.242) (2.050,0.254) (2.100,0.266) (2.150,0.278) (2.200,0.290) (2.250,0.301)
(2.300,0.312) (2.350,0.323) (2.400,0.333) (2.450,0.343) (2.500,0.352) };

%\addplot[plot error, name path=C] coordinates{
%(2.300,0.312) (2.250,0.301) (2.200,0.290) (2.150,0.278) (2.100,0.266) (2.050,0.254)
%(2.000,0.242) (1.950,0.230) (1.946,0.2287) (1.950,0.227) (2.000,0.205) (2.050,0.185)
%(2.100,0.166) (2.150,0.148) (2.200,0.131) (2.250,0.116) (2.300,0.102) } \closedcycle;

%\draw[name path=vertical] (axis cs:2.3,0)--(axis cs:2.3,5);

\addplot[fill=none] fill between [of=A and B,
    soft clip={domain=1:2.3},
    split,
    every segment no 1/.style={fill=orange}];
\end{axis}
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen