我有许多数据系列需要用误差线绘制,但由于它们可能在中间重叠,因此我只想显示第一个点和最后一个点的误差线。所有数据点的误差线都相同,因此显示第一个点和最后一个点就足以显示范围了。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.12,
every axis plot/.append style={
error bars/y dir=both,
error bars/x dir=both,
error bars/x fixed=1,
error bars/y fixed=1,
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot coordinates {(1,1) (3,3) (5,5)};
\addplot coordinates {(1,5) (3,3) (5,1)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
我们可以定义一种新样式来检查坐标索引并绘制相应坐标的误差线。据我所知,这适用于coordinates
和table
绘图类型。此代码基于 Jake 对pgfplots 中可能存在特定的误差线吗?请注意,\coordindex
是从零开始的,但是\numcoords
是从一开始的,所以我们必须从中减去 1\numcoords
以确保我们得到最后一个点。
error bars/first last error bars/.style={
/pgfplots/error bars/draw error bar/.prefix code={
\pgfmathtruncatemacro\marknumbercheck{%
or((\coordindex==0), (\coordindex==(\numcoords-1)))%*See the note
}
\ifnum\marknumbercheck=0
\begin{scope}[opacity=0]
\fi
},
/pgfplots/error bars/draw error bar/.append code={
\ifnum\marknumbercheck=0
\end{scope}
\fi
}
}
注意:最后一个括号实际上是不必要的,如之前链接的问答中所示。这是一个错误还是一个功能?
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.12,
every axis plot/.append style={
error bars/y dir=both,
error bars/y fixed=1,
error bars/first last error bars,
},
error bars/first last error bars/.style={
/pgfplots/error bars/draw error bar/.prefix code={
\pgfmathtruncatemacro\marknumbercheck{or((\coordindex==0), (\coordindex==(\numcoords-1)))}
\ifnum\marknumbercheck=0
\begin{scope}[opacity=0]
\fi
},
/pgfplots/error bars/draw error bar/.append code={
\ifnum\marknumbercheck=0
\end{scope}
\fi
}
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot coordinates {(1,1) (3,3) (5,5)};
\addplot coordinates {(1,5) (3,3) (5,1)};
\end{axis}
\end{tikzpicture}
\end{document}