梅威瑟:

梅威瑟:

我已经调查了几个小时,我发现的最好的结果是定义散点图类中的误差线颜色。太糟糕了,这个解决方案对我来说无法编译。

我希望误差线使用的颜色图与标记使用的颜色相同。下面,如果误差线与零线重叠,它们应该有点透明;否则,它们应该是实心的。

我已经设法按照自己的意愿更改了标记,但我对误差线一无所知。干杯!

梅威瑟:

在此处输入图片描述

\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:不必手动重新调整误差线的代码。

我无法使代码足够动态地设置xminxmax自动适应误差线。

在此处输入图片描述

解决方案:

\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}

相关内容