如何在 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}