Pgfplots \closedcycle заполнен неправильно

Pgfplots \closedcycle заполнен неправильно

Я пытаюсь проиллюстрировать оболочку на графике, основанном на внешне рассчитанных узлах оболочки. Для этого я использую \closedcycleдля заполнения оболочки, заключенной в соответствующие точки.

Первый корпус построен на основе четырех точек данных, в результате чего, как и ожидалось, корпус имеет трапециевидную форму (желтое заполнение).

Второй корпус имеет довольно нерегулярную форму и описывается восемью точками данных в общей сложности. Однако, используя подход, работающий для желтого корпуса, мы получаем неверный график для второго корпуса (синее заполнение):

  1. Корпус кажется удлиненным вниз к оси x.
  2. В заполнении корпуса отсутствует участок, вытянутый вниз до оси x.
  3. Как показывают точки данных, нанесенные на график для иллюстрации (закомментируйте этот график, чтобы увидеть отсутствующую часть корпуса в правом верхнем углу синего корпуса), точки, в которых корпус продолжается вниз до оси x, не являются частью базового набора данных.

Минимальный фрагмент кода для создания графика:

\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}

Как было показано выше, синяя оболочка, показанная на полученном графике, неправильно продлена вниз до оси x, а ее заполнение имеет отсутствующую секцию в соответствующей области (поэтому я предполагаю, что обе проблемы связаны друг с другом):

участок корпуса отсутствует заполнение

решение1

Примечание: Обобщаю комментарий @JasperHabicht, чтобы можно было отметить этот вопрос как решенный.

Использование -- cylceвместо \closedcycleрешило проблему. Для полноты картины соответствующие строки кода приведены ниже.


\addplot+[fill=yellow, draw=none] table[x = hull_x, y = hull_y]{\okay}\closedcycle;

становится

\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;

становится

\addplot+[fill=blue, draw=none] table[x = hull_x, y = hull_y]{\problem} -- cycle;

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