pgfplot 的褪色和阴影组合

pgfplot 的褪色和阴影组合

我正在尝试为 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

这是一个解决方案,仅用于tikzsh/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}

结果

结果

相关内容