我正在尝试使用映射颜色的变体来绘制准备好的轮廓图。使用 可以正确调整线条颜色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}