这是该问题的后续内容:带有对数刻度的误差线中的误差很大。
以下 MWE 绘制了一些线,并提供了expr
当错误导致负值时的情况,而该负值根本不会被 pgfplots 绘制。
documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotstableread{
x y y-err
0.1 0.070 0.003
1.1 0.026 0.001
2.1 0.018 0.001
3.1 0.012 0.02
}{\loadedtable}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ymode=log, ymin=0.005, ymax=0.1,]
\addplot+ [
mark=diamond,
error bars/.cd,
y dir=both,
y explicit,
] table [
x=x,
y=y,
y error plus=y-err, %% First `plus` is set to the error
y error minus expr={ %% `minus` is set to an expression
ifthenelse(
\thisrow{y} - \thisrow{y-err} <= 0,
\thisrow{y} - 1e-4,
\thisrow{y-err}%
)
}] {\loadedtable};
\end{tikzpicture}
\end{document}
有没有办法声明属性
y error plus=y-err,
y error minus expr={
ifthenelse(
\thisrow{y} - \thisrow{y-err} <= 0,
\thisrow{y} - 1e-4,
\thisrow{y-err}%
)
作为某种样式,并在多个图中使用生成的样式?理想情况下,我希望得到这样的结果
table [x=x, y=y, y err=y-err, fix-negative] { .... }
到目前为止,通过定义
\def\yerrminus#1#2{{ifthenelse(\thisrow{#1} - \thisrow{#2} <= 0,
\thisrow{#1} - 1e-4,
\thisrow{#2})}}
我可以做到这一点
table [x=x, y=y, y err plus=y-err,
y err minus expr=\yerrminus{y}{y-err}] { .... }
答案1
那么像下面这样怎么样?
% used PGFPlots v1.15
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{
% create a custom style for the "special" error bars
% the three arguments require the column names of
% - 1 x column
% - 2 y column
% - 3 y minus error
my y error bar style/.style n args={3}{
error bars/y dir=both,
error bars/y explicit,
table/x=#1,
table/y=#2,
% (nothing special needed here)
table/y error plus=#3,
% limit error bar to end at `ymin'
table/y error minus expr={
ifthenelse(
\thisrow{#2} - \thisrow{#3} <= 0,
\thisrow{#2} - 1e-4,
\thisrow{#3}%
)
},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymode=log,
ymin=0.005,
ymax=0.1,
]
\addplot+ [
mark=diamond,
% use the created style here
% (in the `\addplot' options and not in the `table' options)
my y error bar style={x}{y}{y-err},
] table {
x y y-err
0 0.070 0.003
1 0.026 0.001
2 0.018 0.001
3 0.012 0.02
};
\end{axis}
\end{tikzpicture}
\end{document}