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

グリッドは常に同じ色になり、現在の値に応じて色を変更することはサポートされていません。ただし、別の方法があります。

私のアイデアは、カラーバーが重なり合っています。1 つはシェーディング付き (つまり、そのままのカラーバー)、もう 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}

ここに画像の説明を入力してください

関連情報