Pgfplots:使用日期坐标时限制到域

Pgfplots:使用日期坐标时限制到域

我想在使用日期坐标时限制 x 轴的域。但是,以下示例(根据 pgfplots 手册修改)将无法编译,因为第三个图的域边界不是以浮点数提供的:

\documentclass[11pt,a4paper]{article}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{dateplot}

\begin{document}

\begin{tikzpicture}

\pgfplotstableread{
date account1 account2 account3
2008-01-03 60 1200 400
2008-02-06 120 1600 410
2008-03-15 -10 1600 410
2008-04-01 1800 500 410
2008-05-20 2300 500 410
2008-06-15 800 1920 410
}\myTable

\begin{axis}[
date coordinates in=x,
xticklabel={\day.\month.},
xlabel={2008},
yticklabel={\pgfmathprintnumber{\tick} EUR},
ylabel=Total credit,
ylabel style={yshift=10pt}]
\addplot table[x=date,y=account1] {\myTable};
\addplot table[x=date,y=account2] {\myTable};
\addplot table[x=date,y=account3,restrict x to domain={2008-01-03}:{2008-03-15}] {\myTable};
\end{axis}

\end{tikzpicture}

\end{document}

您是否知道如何才能达到限制域的预期效果?我想避免干扰表中提供的数据。

PS:这个问题不同于使用日期坐标时指定域吗?这是关于使用 的soft clip。使用花括号作为域边界(如其中所建议的那样)在这里不起作用。

答案1

该库dateplot将定义x coord trafo以便它可以将日期(和时间)转换为浮点数。但是,restrict x to domain不包括来自的信息x coord trafo。也就是说,PGFPLOTS 将尝试解析您的日期输入,假设它们是浮点数,最终出现“无法解析”错误。

有人可能想写一个restrict to domain尊重coord trafo-system 的通用 -system。但也可以手动进行翻译,如下所示

\pgfplotsset{
    restrict x to domain**/.code args={#1:#2}{
        \pgfkeysalso{/pgfplots/x coord trafo=#1}
        \let\numericxmin\pgfmathresult
        \pgfkeysalso{/pgfplots/x coord trafo=#2}
        \let\numericxmax\pgfmathresult
        \pgfkeysalso{/pgfplots/restrict x to domain={\numericxmin}:{\numericxmax}}
    }
}

MWE 写道

\documentclass[11pt,a4paper]{article}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{dateplot}

\begin{document}

\begin{tikzpicture}

\pgfplotstableread{
date account1 account2 account3
2008-01-03 60 1200 400
2008-02-06 120 1600 410
2008-03-15 -10 1600 410
2008-04-01 1800 500 410
2008-05-20 2300 500 410
2008-06-15 800 1920 410
}\myTable

\pgfplotsset{
    restrict x to domain**/.code args={#1:#2}{
        \pgfkeysalso{/pgfplots/x coord trafo=#1}
        \let\numericxmin\pgfmathresult
        \pgfkeysalso{/pgfplots/x coord trafo=#2}
        \let\numericxmax\pgfmathresult
        \pgfkeysalso{/pgfplots/restrict x to domain={\numericxmin}:{\numericxmax}}
    }
}

\begin{axis}[
date coordinates in=x,
xticklabel={\day.\month.},
xlabel={2008},
yticklabel={\pgfmathprintnumber{\tick} EUR},
ylabel=Total credit,
ylabel style={yshift=10pt}]
\addplot table[x=date,y=account1] {\myTable};
\addplot table[x=date,y=account2] {\myTable};
\addplot table[x=date,y=account3,restrict x to domain**={2008-01-03}:{2008-03-15}] {\myTable};
\end{axis}

\end{tikzpicture}

\end{document}

相关内容