Ich versuche, eine Hülle in einem Plot darzustellen, der auf extern berechneten Hüllenknoten basiert. Dazu fülle ich \closedcycle
die Hülle, die von den entsprechenden Punkten umschlossen wird.
Der erste Rumpf wird anhand von vier Datenpunkten dargestellt, was wie erwartet zu einer annähernd trapezförmigen Rumpfform führt (gelbe Füllung).
Der zweite Rumpf hat eine eher unregelmäßige Form und wird durch insgesamt acht Datenpunkte beschrieben. Wenn man jedoch den Ansatz verwendet, der für den gelben Rumpf funktioniert, ergibt sich für den zweiten Rumpf (blaue Füllung) ein falsches Diagramm:
- Der Rumpf scheint bis zur x-Achse verlängert zu sein
- Der bis zur x-Achse verlängerte Abschnitt fehlt in der Rumpffüllung
- Wie durch die zur Veranschaulichung dargestellten Datenpunkte angezeigt (kommentieren Sie dieses Diagramm aus, um den fehlenden Rumpfabschnitt oben rechts neben dem blauen Rumpf anzuzeigen), sind die Punkte, an denen der Rumpf bis zur X-Achse verlängert wird, nicht Teil des zugrunde liegenden Datensatzes.
Minimaler Codeausschnitt zum Erstellen des Plots:
\documentclass{article}
\usepackage{filecontents}
\usepackage{pgfplots}
\begin{filecontents}{okay_points.dat}
hull_x;hull_y
0.35501086786719216;0.35501086786719216
0.3501998312158284;0.3501998312158284
0.3501998312158284;0.0
0.35501086786719216;0.0
\end{filecontents}
\begin{filecontents}{problematic_points.dat}
hull_x;hull_y
0.6268512948297316;0.6591688411952603
0.3501998312158284;0.3501998312158284
0.35501086786719216;0.35501086786719216
0.6278876657471278;0.6560286756711164
0.6330607325983083;0.6624668180953179
0.6330598364108084;0.6638809669603063
0.6322766634159019;0.6639305124049031
0.6280718253300845;0.6603345843906823
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
no markers,
%
xmin = 0.25,
xmax = 0.7,
ymin = 0.25,
ymax = 0.7,
]
\pgfplotstableread[col sep=semicolon]{okay_points.dat}\okay
\pgfplotstableread[col sep=semicolon]{problematic_points.dat}\problem
% -- okay --
% use closedcycle to plot hull using data points
\addplot+[fill=yellow, draw=none] table[x = hull_x, y = hull_y]{\okay}\closedcycle;
% -- problematic --
% use closedcycle to plot hull using data points
\addplot+[fill=blue, draw=none] table[x = hull_x, y = hull_y]{\problem}\closedcycle;
% --> problem: hull extended to the x-axis (thin line) and filled section missing in upper part of hull
% plot points to illustrate hull node points
\addplot+[only marks, mark options = {thin, solid}, gray] table[x = hull_x, y = hull_y]{\problem};
% --> comment out / disable line to see section missing in upper part of hull (otherwise covered by point markers)
% --> hull node points do not include values with y < 0.25: Why is filled area extended to x-axis?
\end{axis}
\end{tikzpicture}
\end{document}
Wie erläutert ist die blaue Hülle im erhaltenen Diagramm fälschlicherweise bis zur x-Achse verlängert und ihre Füllung weist im entsprechenden Bereich einen fehlenden Abschnitt auf (daher gehe ich davon aus, dass beide Probleme miteinander verknüpft sind):
Antwort1
Bemerkung: Zusammenfassung des Kommentars von @JasperHabicht, um diese Frage als gelöst markieren zu können.
Die Verwendung -- cylce
von anstelle von \closedcycle
hat das Problem gelöst. Der Vollständigkeit halber sind die relevanten Codezeilen unten zusammengefasst.
\addplot+[fill=yellow, draw=none] table[x = hull_x, y = hull_y]{\okay}\closedcycle;
wird
\addplot+[fill=yellow, draw=none] table[x = hull_x, y = hull_y]{\okay} -- cycle;
\addplot+[fill=blue, draw=none] table[x = hull_x, y = hull_y]{\problem}\closedcycle;
wird
\addplot+[fill=blue, draw=none] table[x = hull_x, y = hull_y]{\problem} -- cycle;