我正在尝试为 pgfplots 图表创建一个背景,该图表具有水平阴影,并且该阴影也从底部的透明逐渐变为顶部的纯色。
我想要达到的效果如下图所示:
我可以使用下面的代码创建接近背景的东西,但是当将其作为背景添加到情节中时,情节会“崩溃”,无法正确布局。
\pgfdeclarehorizontalshading{myshadingA}
{5cm}{color(0)=(orange); color(2.5cm)=(white); color(5cm)=(green)}
\pgfsetfading{fadeSouth} {\pgftransformscale{4}}
\pgftext[at=\pgfpoint{1cm}{0cm}] {\pgfuseshading{myshadingA}} ;
在附加的 MWE 中,我可以创建水平阴影。但是,我无法将其与透明度结合起来。所包含的淡入淡出似乎没有任何作用。
我无法解决的另一个挑战是如何使用 rel axis cs 指定矩形的大小。目前我已经\pgfpoint{195}{162}
手动指定了坐标。
\documentclass[11pt, a5paper]{scrartcl}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{fillbetween}
\usepgflibrary{shadings}
\usetikzlibrary{backgrounds}
\usetikzlibrary {fadings,patterns}
\begin{document}
\tikzfading[name=fadeSouth, top color=transparent!0, bottom color=transparent!100] ;
\begin{tikzpicture}
\pgfdeclarehorizontalshading{myshading}{300}
{color(0bp)=(red); color(25bp)=(orange); color(50bp)=(white); color(75bp)=(green); color(100bp)=(teal)} ;
\begin{axis}[
ylabel=Importance,
xlabel=State,
grid=both,
% Fix axis range
xmin=-4,
xmax=4,
ymin=0,
ymax=10,
% Set tick marks
xtick distance = 1,
ytick distance = 1,
]
\addplot+ [nodes near coords,only marks, point meta=explicit symbolic]
table [meta=label] {
zState Importance label
-1.96 7 1
1.01 0 2
-1.08 3 3
-3.37 9 4
-0.35 2 5
1.38 4 6
};
\begin{scope}[on background layer]
\path [scope fading=fadeSouth ] (rel axis cs:0,0) rectangle (rel axis cs:1,1) ;
\pgfpathrectangle{\pgfpointorigin}{\pgfpoint{195}{162}}
\pgfshadepath{myshading}{0}
\pgfusepath{} ;
\end{scope}
\end{axis}
\end {tikzpicture}
\end{document}
答案1
这是一个解决方案,仅用于tikz
sh/fading。我们使用 2 个矩形color left/right
和 path fading=south
。另外,如果我们转移范围并匹配tikz
内容的 x/y 单位并在之前绘制它axis
,我们基本上可以在没有任何其他包的情况下制作背景。
我还添加了目标图像中的数字,以进一步说明背景思想。您可能需要进行更多调整axis
,我不是 pgfplots 人员。
平均能量损失
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{fadings}
\begin{document}
\begin{tikzpicture}[x=1cm,y=1cm]
\begin{scope}[xshift=+4cm]
\shade[left color=red, right color=white,path fading=south] (-4,10) rectangle (0,0);
\shade[left color=white,right color=green,path fading=south] (+4,10) rectangle (0,0);
\foreach \lt/\lx/\ly in {1/2/7.5,2/2/2.5,3/-2/2.5,4/-2/7.5}{
\node[black,opacity=.1] at (\lx,\ly) {\Huge\textbf{\lt}}; }
\end{scope}
\begin{axis}[x=1cm,y=1cm,
ylabel=Importance,
xlabel=State,
xmin=-4,xmax=+4,
ymin=0, ymax=10,
grid=both,
minor y tick num=4,
minor x tick num=3,
ytick distance=5,
xtick distance=4,
grid style={black,dashed},
minor grid style={black,dotted}]
\end{axis}
\end{tikzpicture}
\end{document}