Ich versuche, eine Variation der zugeordneten Farbe für ein vorbereitetes Konturdiagramm zu verwenden. Die Linienfarbe wird mithilfe von korrekt angepasst draw color=mapped color!50!black
, aber ich kann den zugeordneten Farbwert nicht für das Raster der Farbleiste verwenden. Das folgende Beispiel erzeugt schwarze Rasterlinien, aber ich hätte sie gerne in einem dunkleren Farbton der Farbe, die dem Tick-Wert entspricht.
\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}
Antwort1
Ein Raster hat immer dieselbe Farbe. Eine Änderung der Farben abhängig vom aktuellen Wert wird nicht unterstützt. Es geht aber auch anders.
Meine Idee ist, dass wir zeichnen könntenzweiFarbbalken übereinander: einer mit der Schattierung (also Ihr Farbbalken wie er ist) und einer mit colorbar sampled line
und einem Balkenmarker. Die Schlüsselidee besteht darin colorbar/draw
, einen Codeschlüssel zu ändern, der bei Ausführung den gesamten Farbbalken generiert:
\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}
Die Grafikebenen könnten besser sein, scheinen aber in Ordnung zu sein.
BEARBEITEN
Sie haben um Verbesserungen bei geschichteten Grafiken gebeten. Die gute Nachricht ist: Meine anfängliche Lösung würde sofort funktionieren, wenn ich hinzufüge \pgfplotsset{set layers}
– dies würde die Ebenen automatisch sortieren. Leider scheint es einen Fehler in pgfplots zu geben, der dazu führt, dass geschichtete Grafiken Farbbalken zerstören :-( Ich werde mich um diesen Fehler kümmern.
Dieser Fehler führte mich zu einem Workaround. Dieser Workaround basiert auf internen Kenntnissen der Farbbalkenimplementierung: jeder (aktuelle) Farbbalken respektiert einen Schlüssel namens /pgfplots/colorbar addplot
. Der Zweck dieses Schlüssels besteht darin, den Farbbalken als solchen ohne seine Achse zu visualisieren. Wenn wir diesen anpassen, können wir die richtige Schichtung erreichen. Hier ist die Lösung:
\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}