pgfplots colorbar의 매핑된 그리드 색상

pgfplots colorbar의 매핑된 그리드 색상

준비된 등고선 플롯에 대해 매핑된 색상의 변형을 사용하려고 합니다. 을 사용하여 선 색상이 올바르게 조정되었지만 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

그리드는 항상 동일한 색상을 가지며, 현재 값에 따라 색상을 변경하는 것은 지원되지 않습니다. 하지만 다른 방법이 있습니다.

내 생각은 우리가 그릴 수 있다는 것입니다색상 막대가 서로 겹칩니다. 하나는 음영 처리(즉, 현재 그대로)가 있고 다른 하나는 colorbar sampled line막대 마커가 있습니다. 핵심 아이디어는 colorbar/draw실행될 때 전체 컬러바를 생성하는 코드 키인 를 수정하는 것입니다.

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

여기에 이미지 설명을 입력하세요

관련 정보