Невозможно использовать заполнение между маркерами и обрезку

Невозможно использовать заполнение между маркерами и обрезку

В groupplotсреде мне нужно использовать fill betweenдва пути, и один из этих путей имеет маркеры, которые находятся на осях. Я хочу обрезать эти маркеры, но это вызывает проблему с fill between, так как первый путь тогда считается пустым.

Как можно обрезать маркеры и использовать fill between?

Ниже приведен MWE. Чтобы ясно увидеть проблему, вы можете включать clip marker paths=true,и выключать закомментированную строку. Если она не закомментирована, проблема здесь.

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning, pgfplots.groupplots}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{fillbetween}

\begin{document}
    \begin{tikzpicture}

    \begin{groupplot}[group style={group size=2 by 1}, scale only axis,
%   clip marker paths=true,
    axis on top=true]

    % Plot main figure (a)
    \nextgroupplot[scale only axis,
    xmin=0,
    xmax=100,
    ymin=0,
    ymax=550]

    \addplot[name path = pathA, color=blue, mark=square*] coordinates {(0,250)(100,450)};
    \path[name path = pathAxis] (axis cs:0,0) -- (axis cs:100,0);
    \addplot [gray!30] fill between[of = pathA and pathAxis, soft clip = {domain=20:50}];

    \nextgroupplot[scale only axis, restrict y to domain=190:240]

    \end{groupplot}

    \end{tikzpicture}
\end{document}

решение1

Это всего лишь обходной путь. Вы добавляете сюжет дважды, один раз невидимо, чтобы было что-то, что можно использовать для заполнения, и один раз «по-настоящему». (Я немного поэкспериментировал с клипами и т. д., но ничего из того, что получилось, не было более элегантным, чем этот обходной путь, поэтому я его выкладываю. Разумеется, я надеюсь, что есть более элегантное решение.)

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning, pgfplots.groupplots}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{fillbetween}

\begin{document}
    \begin{tikzpicture}

    \begin{groupplot}[group style={group size=2 by 1}, scale only axis,
    axis on top=true]

    % Plot main figure (a)
    \nextgroupplot[scale only axis,clip marker paths=true,
    xmin=0,
    xmax=100,
    ymin=0,
    ymax=550]

    \addplot[color=blue, mark=square*] coordinates {(0,250)(100,450)};
    \addplot[name path = pathA,draw=none,no marks,forget plot] coordinates {(0,250)(100,450)};
    \path[name path = pathAxis] (axis cs:0,0) -- (axis cs:100,0);
    \addplot [gray!30] fill between[of = pathA and pathAxis, soft clip = {domain=20:50}];

    \nextgroupplot[scale only axis, restrict y to domain=190:240]
    \end{groupplot}

    \end{tikzpicture}
\end{document}

введите описание изображения здесь

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