Цвет сетки, сопоставленный для цветовой шкалы pgfplots

Цвет сетки, сопоставленный для цветовой шкалы pgfplots

Я пытаюсь использовать вариацию сопоставленного цвета для подготовленного контурного графика. Цвет линии корректно настроен с помощью draw color=mapped color!50!black, но я не могу использовать сопоставленное значение цвета для сетки цветовой шкалы. В примере ниже получаются черные линии сетки, но я хотел бы, чтобы они были более темным оттенком цвета, соответствующего значению тика.

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.11}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[colorbar,colorbar style={grid,grid style={color=mapped color!50!black}}]
        \addplot[contour prepared,contour/draw color=mapped color!50!black]
            table {
                2 2 0.8
                0.857143 2 0.6
                1 1 0.6
                2 0.857143 0.6
                2.5 1 0.6
                2.66667 2 0.6
                0.571429 2 0.4
                0.666667 1 0.4
                1 0.666667 0.4
                2 0.571429 0.4
                3 0.8 0.4
                0.285714 2 0.2
                0.333333 1 0.2
                1 0.333333 0.2
                2 0.285714 0.2
                3 0.4 0.2
            };
        \end{axis}
    \end{tikzpicture}
\end{document}

решение1

Сетка всегда будет иметь один и тот же цвет, изменение ее цветов в зависимости от текущего значения не поддерживается. Но есть другой способ.

Моя идея заключается в том, что мы могли бы нарисоватьдваcolorbars друг на друге: один с затенением (т.е. ваш как есть) и один с colorbar sampled lineи маркером bar. Основная идея заключается в том, чтобы изменить colorbar/draw, код-ключ, который генерирует всю colorbar при его выполнении:

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.11}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            colorbar,
            colorbar/draw/.append code={%
                % the /.append code means that colorbar/draw is
                % executed as usual -- and we execute the following
                % code as well, which draws a _second_ colorbar on top
                % of it:
                \pgfplotsset{
                    colorbar sampled line={
                        samples at={0,0.2,0.4,0.6,0.8},
                        scatter,
                        scatter/use mapped color={draw=mapped color!50!black},
                        only marks,
                        mark=-, 
                        mark size=\pgfkeysvalueof{/pgfplots/colorbar/width}/2,
                        line width=2pt,
                    },
                    %
                    % do not typeset labels twice:
                    hide axis,
                    %
                    % colorbar sampled line overwrites (resets)
                    % colorbar/draw.
                    %
                    % Execute it to draw the result:
                    colorbar/draw,
                }%
            },%
        ]
        \addplot[contour prepared,contour/draw color=mapped color!50!black]
            table {
                2 2 0.8
                0.857143 2 0.6
                1 1 0.6
                2 0.857143 0.6
                2.5 1 0.6
                2.66667 2 0.6
                0.571429 2 0.4
                0.666667 1 0.4
                1 0.666667 0.4
                2 0.571429 0.4
                3 0.8 0.4
                0.285714 2 0.2
                0.333333 1 0.2
                1 0.333333 0.2
                2 0.285714 0.2
                3 0.4 0.2
            };
        \end{axis}
    \end{tikzpicture}
\end{document}

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

Графические слои могли бы быть лучше, но в целом все в порядке.


РЕДАКТИРОВАТЬ

Вы просили улучшения в отношении многослойной графики. Хорошая новость: мое первоначальное решение работало бы из коробки, если бы добавило \pgfplotsset{set layers}- это автоматически сортировало бы слои. К сожалению, похоже, в pgfplots есть ошибка, из-за которой многослойная графика нарушает цветовые шкалы :-( Я разберусь с этой ошибкой.

Эта ошибка привела меня к обходному пути. Этот обходной путь основан на внутреннем знании реализации цветовой шкалы: каждая (текущая) цветовая шкала учитывает ключ, называемый /pgfplots/colorbar addplot. Цель этого ключа — визуализировать цветовую шкалу как таковую, без ее оси. Если мы настроим ее, мы сможем получить правильное наложение слоев. Вот решение:

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.11}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            colorbar,
            colorbar style={%
                colorbar addplot/.add={}{%
                    \addplot[
                        samples at={0,0.2,0.4,0.6,0.8},
                        clip marker paths,
                        scatter,
                        point meta=y,
                        scatter/use mapped color={draw=mapped color!50!black},
                        only marks,
                        mark=-, 
                        mark size=\pgfkeysvalueof{/pgfplots/colorbar/width}/2,
                        line width=2pt,
                    ]
                        (0.5,x);
                },
            },
        ]
        \addplot[contour prepared,contour/draw color=mapped color!50!black]
            table {
                2 2 0.8
                0.857143 2 0.6
                1 1 0.6
                2 0.857143 0.6
                2.5 1 0.6
                2.66667 2 0.6
                0.571429 2 0.4
                0.666667 1 0.4
                1 0.666667 0.4
                2 0.571429 0.4
                3 0.8 0.4
                0.285714 2 0.2
                0.333333 1 0.2
                1 0.333333 0.2
                2 0.285714 0.2
                3 0.4 0.2
            };
        \end{axis}
    \end{tikzpicture}
\end{document}

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

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