使用pgfplot
和dateplot
,我如何在水平轴上设置日期增量?这是我目前所拥有的:
\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}
如何设置水平日期增量,例如一个月?
答案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 博士做出的宝贵贡献。