pgfplots-突出显示/填充数据文件中的区域

pgfplots-突出显示/填充数据文件中的区域

如何在 pgfplots 中突出显示数据文件的特定域范围?例如,我想做类似的事情:

\begin{tikzpicture}[baseline,trim axis left]
\begin{axis}[
 ylabel=frequency,
 y unit=\si{\hertz},
]
\addplot file {mydata.dat};
% mystery addplot goes here
\end{axis}
\end{tikzpicture}

“% mystery addplot goes here” 行将生成类似下面三个彩色框的内容,这些内容只能由域指定。类似

\addplot [color=colora,fill,domain=2500:3500] file {mydata.dat} \closedcycle;

我正在寻找的突出显示示例

有任何想法吗?

答案1

您可以使用轴坐标系在轴边界处获取起点。但它需要位于图之前,以免打印在图上。我定义了一种emphasize样式,用于给出domain带有颜色的类似指令。

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7,
emphasize/.code args={#1:#2with#3}{
    \pgfplotsextra{
            \draw[fill=#3] ({axis cs:#1,0} |- {axis description cs:0,0}) 
            rectangle ({axis cs:#2,0} |- {axis description cs:0,1});
        }
    }
}
\begin{document}

\begin{tikzpicture}
\begin{axis}[
ylabel=frequency,
]
\addplot+[no marks,emphasize=2:4 with blue!10,domain=0:10] {sin(20*x)+5};
\addplot+[no marks,emphasize=28:30 with red!10,domain=25:40] {sin(20*x)+10};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

你可以选择把高亮显示在哪里(在所有内容后面、在图表后面但在网格上方、在图表顶部,...),如果你输入set layers选项axis并使用 Andrew Stacey 的回答中非常巧妙的代码TikZ 中的“Z 级别”

我定义了一种新样式highlight=<start>:<end>来突出显示所需区域。可以使用可选键指定绘图样式(颜色、不透明度)highlight style=<options>,使用以下命令设置将在其上绘制突出显示的图层highlight layer=<layer name>

\addplot+[no marks, highlight=1:4] {rnd/2+sin(deg(x))};
\addplot+[no marks, highlight layer=axis ticks, highlight style={red!20}, highlight=6:9] {rnd/2+cos(deg(x))};

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\pgfkeys{%
  /tikz/on layer/.code={
    \pgfonlayer{#1}\begingroup
    \aftergroup\endpgfonlayer
    \aftergroup\endgroup
  }
}

\pgfplotsset{
    highlight/.code args={#1:#2}{
        \fill [every highlight] ({axis cs:#1,0}|-{rel axis cs:0,0}) rectangle ({axis cs:#2,0}|-{rel axis cs:0,1});
    },
    /tikz/every highlight/.style={
        on layer=\pgfkeysvalueof{/pgfplots/highlight layer},
        blue!20
    },
    /tikz/highlight style/.style={
        /tikz/every highlight/.append style=#1
    },
    highlight layer/.initial=axis background
}


\begin{document}
\begin{tikzpicture}
\begin{axis}[
    set layers,
    domain=0:10,
    grid=both
]
\addplot+[no marks, highlight=1:4] {rnd/2+sin(deg(x))};
\addplot+[no marks, highlight layer=axis ticks, highlight style={red!20}, highlight=6:9] {rnd/2+cos(deg(x))};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容