我已经调查了几个小时,我发现的最好的结果是定义散点图类中的误差线颜色。太糟糕了,这个解决方案对我来说无法编译。
我希望误差线使用的颜色图与标记使用的颜色相同。下面,如果误差线与零线重叠,它们应该有点透明;否则,它们应该是实心的。
我已经设法按照自己的意愿更改了标记,但我对误差线一无所知。干杯!
梅威瑟:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{filecontents}{testdata.csv}
value, err
-1.0, 0.5
-0.5, 2
1.1, 3
2.5, 2
3.1, 4
3.5, 2
4.0, 5
\end{filecontents}
\pgfplotstableread[col sep=comma]{testdata.csv}\testtable
\begin{tikzpicture}
\begin{axis}[
colormap={greens}{color=(green!10) color=(green!100)}
]
\draw [dashed] (axis cs: 0,\pgfkeysvalueof{/pgfplots/ymin}) --
(axis cs: 0,\pgfkeysvalueof{/pgfplots/ymax});
\addplot+ [scatter,
only marks,
scatter src=(abs(\thisrow{value})-\thisrow{err}>0),
error bars/.cd,
x explicit,
x dir=both
] table [
x=value,
y expr=\coordindex,
x error expr=\thisrow{err}
] {\testtable};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
通过使用https://tex.stackexchange.com/a/34681TikZling 建议我按照如下方法修改代码,以获得所需的结果。我还删除了一些(就我的情况而言)多余的代码,并添加了axis cs:
不必手动重新调整误差线的代码。
我无法使代码足够动态地设置xmin
并xmax
自动适应误差线。
解决方案:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\pgfplotsset{compat=1.17}
\pgfplotsset{
error bars with mapped color/.style={
disabledatascaling,
visualization depends on=\thisrow{err} \as \error,
scatter/@pre marker code/.append style={
/pgfplots/error bars/.cd,
error mark options={draw=mapped color},
error mark=|,
draw error bar={(0,0)}{(\error,0)},
draw error bar={(0,0)}{(-\error,0)}
}
}
}
\begin{document}
\begin{filecontents}{testdata.csv}
value, err
-1.0, 0.5
-0.5, 2
1.1, 3
2.5, 2
3.1, 4
3.5, 2
4.0, 5
\end{filecontents}
\pgfplotstableread[col sep=comma]{testdata.csv}\testtable
\begin{tikzpicture}
\begin{axis}[
colormap={greens}{color=(green!20) color=(green!100)},
disabledatascaling,
scatter/use mapped color={
draw=mapped color, fill=mapped color},
error bars with mapped color/.style={
visualization depends on=\thisrow{err} \as \error,
scatter/@pre marker code/.append style={
/pgfplots/error bars/.cd,
error mark options={draw=mapped color},
error mark=|,
draw error bar={(0,0)}{(axis cs: \error,0)},
draw error bar={(0,0)}{(axis cs: -\error,0)}
},
scatter/@post marker code/.append code={}
},
xmin=-2.9,
xmax=10.1]
\draw [dashed] (axis cs: 0,\pgfkeysvalueof{/pgfplots/ymin}) --
(axis cs: 0,\pgfkeysvalueof{/pgfplots/ymax});
\addplot [scatter,
scatter src=(abs(\thisrow{value})-\thisrow{err}>0),
only marks,
error bars with mapped color=err,
error bars/.cd,
x dir=both,
x explicit
] table [
x=value, y expr=\coordindex]
{\testtable};
\end{axis}
\end{tikzpicture}
\end{document}