我想突出显示下面两个测量值(用点和误差线表示)一致的区域:
这是我正在使用的代码:
\documentclass[a4paper,10pt]{book}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=30,xmax=70,ymin=0,ymax=3,unit vector ratio=1 2,ytick=\empty,xtick={30,40,...,70}]
\addplot +[blue,scatter,only marks,
scatter src=explicit symbolic,
error bars/.cd,
y dir=both,y explicit,x dir=both,x explicit]
table[row sep=crcr, x index=0, y index=1, x error index=2, y error index=3, meta index=4 ]
{45 1 5 0 1\\
56 2 8 0 2\\};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
这里有三种方法可以做到这一点。我假设您想要突出显示轴的整个高度,如果您不需要那么就不用太费劲了,只需使用合理的 y 值即可。
一般来说,你可以axis cs
使用轴坐标系来放置东西,例如\draw (axis cs:1,1) -- (axis cs:1,2);
。但是,如果你添加\pgfplotsset{compat=1.11}
(或更新版本,最新版本是 1.12)axis cs
是默认的,那么你会得到相同的结果\draw (1,1) -- (1,2);
。这当然适用于放置在环境内的路径axis
。
另一个有用的功能是,你可以使用 获得轴限值,对于、和 也\pgfkeysvalueof{/pgfplots/ymin}
类似。这引出了三个选项中的第一个:ymax
xmin
xmax
\fill [red,opacity=0.3] (48,\pgfkeysvalueof{/pgfplots/ymin}) rectangle (50,\pgfkeysvalueof{/pgfplots/ymax});
这种方法的一个变体是利用轴框是名为 的节点这一事实current axis
。这可以与垂直坐标系一起使用以获得相同的效果:
\fill [pattern=north east lines,opacity=0.2] (48,0 |-current axis.south east) rectangle (50,0 |-current axis.north west);
写入时,(50,0 |- current axis.north)
您将获得 x 坐标为 (50,0) 和 y 坐标为 的坐标current axis.north
。换句话说,|-
在这种情况下意味着“从第一个坐标绘制一条垂直线,从第二个坐标绘制一条水平线,并使用它们的交点”。
第三种方式使用\addplot
,因此compat
不需要进行任何设置:
\addplot [pattern=north west lines,densely dotted,opacity=0.6] coordinates {
(48,\pgfkeysvalueof{/pgfplots/ymax})
(50,\pgfkeysvalueof{/pgfplots/ymax})
}
\closedcycle;
我使用与上面相同的两个坐标\fill
,并\closedcycle
在末尾添加。\closedcycle
表示曲线下的区域被填充。
其他说明:
该
patterns
库仅被加载以获得两种不同的pattern
填充,我使用它们只是为了能够一并说明所有内容。该
backgrounds
库提供了on background layer
用于scope
环境的选项。它的作用正如您所想的那样,它将路径放在了scope
其他内容的下方。
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{backgrounds,patterns}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=30,xmax=70,ymin=0,ymax=3,unit vector ratio=1 2,ytick=\empty,xtick={30,40,...,70}]
\addplot +[blue,scatter,only marks,
scatter src=explicit symbolic,
error bars/.cd,
y dir=both,y explicit,x dir=both,x explicit]
table[row sep=crcr, x index=0, y index=1, x error index=2, y error index=3, meta index=4 ]
{45 1 5 0 1\\
56 2 8 0 2\\};
\begin{scope}[on background layer]
\fill [red,opacity=0.3] (48,\pgfkeysvalueof{/pgfplots/ymin}) rectangle (50,\pgfkeysvalueof{/pgfplots/ymax});
\fill [pattern=north east lines,opacity=0.2] (48,0 |-current axis.south) rectangle (50,0 |-current axis.north);
\addplot [pattern=north west lines,densely dotted,opacity=0.6] coordinates {(48,\pgfkeysvalueof{/pgfplots/ymax}) (50,\pgfkeysvalueof{/pgfplots/ymax})} \closedcycle;
\end{scope}
\end{axis}
\end{tikzpicture}
\end{document}