我有一张图显示函数 f(x,y),就像 imshow 那样,还有一张图显示概率分布 P(f)。下面是该情况的图片。底部绘图的代码基本上是
\addplot[const plot,fill=black!20,very thin] file{hist.dat} \closedcycle;
为了增加两幅图像之间的视觉联系,我想在第二张图中使用第一张图的颜色图:直方图下方当前的灰色区域应该用 x 方向上的颜色图渐变填充。
fill=mapped color
我尝试使用和不同绘图类型(如ycomb
和)来实现这一点ybar interval
,但似乎开箱即用,只有mesh
和scatter
支持色彩图,而两者都不适合我的场景。
编辑:为了完整性,这是我的解决方案,源自已接受的答案。
\def\defcolormapshading#1#2{%
\pgfplotscolormaptoshadingspec{#2}{50pt}\tempa%
\def\tempb{\pgfdeclarehorizontalshading{#1}{\paperheight}}%
\expandafter\tempb\expandafter{\tempa}%
\let\tempa\undefined\let\tempb\undefined%
}%
把这个放在你的序言中。然后,在 tikzpicture 环境之前,说
\defcolormapshading{myshading}{mymap}
(用颜色图名称替换“mymap”,用阴影的描述性名称替换“myshading”)。然后将密钥提供shading=myshading
给\addplot
。此代码片段中 like 的用法\pgfplotscolormaptoshadingspec
在 pgfplots 手册中有详细说明。
答案1
您可以使用 定义适当的阴影,并使用它来填充您的图。阴影\pgfdeclarehorizontalshading
位置处的颜色是最左侧可见的颜色,阴影位置处的颜色是最右侧可见的颜色。25bp
75bp
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps}
\begin{document}
\begin{tikzpicture}
\pgfdeclarehorizontalshading{stefan}{100bp}{
color(0bp)=(blue!50!black);
color(25bp)=(blue!50!black);
color(50bp)=(blue);
color(55bp)=(green);
color(60bp)=(yellow);
color(65bp)=(orange);
color(70bp)=(red);
color(75bp)=(red!50!black);
color(100bp)=(red!50!black)
}
\begin{axis}[enlargelimits=false,domain=-2.63:1.39,point meta=x]
\addplot [shading=stefan] coordinates {(-2.63,0.2) (-0.5,0.4) (-0.2,0.5) (-0.1,2.6) (0,0.8) (0.1,0.7) (0.2,0.8) (0.4,2.2) (0.5,0.4) (1.39,0.3)} \closedcycle;
\end{axis}
\end{tikzpicture}
\end{document}