我想在使用日期坐标时限制 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}