如何设置 pgfplot dateplot 增量?

如何设置 pgfplot dateplot 增量?

使用pgfplotdateplot,我如何在水平轴上设置日期增量?这是我目前所拥有的:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\pgfplotsset{compat=1.9}
\pgfplotsset{grid style={dashed}}

\begin{document}
\begin{tikzpicture}
\centering
\begin{axis}[
    width=1.2\linewidth,
    height=6cm,
    xmin=2012-01-01,
    xmax=2013-01-01,
    date coordinates in=x,
    xticklabel={\day-\month-\year},
    x tick label style={rotate=45,anchor=north east},
    grid=both,
    ymin=-1,ymax=10,
    xlabel={Date ($day-month-year$)},
    ylabel={Wind velocity ($m/s$)}
]
\addplot[black] table [col sep=comma,y=wind speed (m/s)] {./wind_data.txt};
\end{axis}
\end{tikzpicture}
\end{document}

在本例中,它生成了 2012 年马尼拉大都会绝对风速的图表马尼拉大都会的风速图

如何设置水平日期增量,例如一个月?

答案1

您的解决方案是正确的做法:提供xtick合适的清单。

但是,“合适的列表”可能包含增量!例如,尝试一下:

\documentclass{article}
\usepackage{tikz}

\begin{document}

\foreach \value in {2012-01-01,2012-...-01,2012-12-01} {\value\par}
\end{document}

在此处输入图片描述

您可以将多个年份合并为一个列表,但在这种情况下,您必须提供列表中的前两个项目,以便它可以通过差异计算增量:

\documentclass{article}
\usepackage{tikz}

\begin{document}

\foreach \value in {
    2012-01-01,2012-...-01,2012-12-01,
    2013-01-01,2013-02-01,2013-...-01,2013-12-01,
}
    {\value\par}
\end{document}

在此处输入图片描述

您可以直接将这些\foreach值插入到 的值中xtick。由于模式相同,因此仍然很繁琐。以下小辅助宏可以在一定程度上简化刻度生成:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\pgfplotsset{compat=1.9}
\pgfplotsset{grid style={dashed}}

\pgfplotsset{
    % a style which generates ticks for each year in '#1' to #2
    % (inclusive), at day '#3'.
    monthly ticks/.code args={#1#2#3}{%
        \xdef\accum{}%
        \foreach \year in {#1,...,#2} {%
            %
            % append a comma if it is not empty:
            \ifx\accum\empty
            \else
                \xdef\accum{\accum,}%
            \fi
            %
            % append the next year:
            \xdef\accum{\accum\year-01-#3,\year-02-#3,\year-...-#3,\year-12-#3}%
        }%
        \message{Using monthly ticks=\accum^^J}%
        \pgfkeysalso{/pgfplots/xtick/.expand once={\accum}}%
    }%
}

\begin{document}
\begin{tikzpicture}
\centering
\begin{axis}[
    width=1.2\linewidth,
    height=6cm,
    xmin=2012-01-01,
    xmax=2013-01-01,
    date coordinates in=x,
    ymin=-1,ymax=10,
    xticklabel={\day-\month-\year},
    x tick label style={rotate=45,anchor=north east},
    grid=both,
    ymin=-1,ymax=10,
    xtick distance=30,
    xlabel={Date ($day-month-year$)},
    ylabel={Wind velocity ($m/s$)},
    %
    monthly ticks={2011}{2013}{01},
]
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

作为 PGFplots 的完全新手,我盲目地将上面 Feuersänger 博士提供的非常方便的代码复制到我的编辑器中,却发现它不起作用,出现了以下错误:Undefined control sequence. ]

对于 PGFplots 世界中的所有其他新手,请注意,如果您date ZERO=2012-01-01,\begin{axis}代码部分中添加如下内容,它就会起作用:\begin{axis}[...,date ZERO = 2012-01-01,...]

感谢 Feuersänger 博士做出的宝贵贡献。

相关内容