如何修改 PGFplots 包中的以下示例,使 x 轴代表月份并标记为 JAN、FEB、MAR 等?
\begin{tikzpicture}
\begin{axis}[
smooth,
stack plots=y,
area style,
enlarge x limits=false]
\addplot coordinates
{(0,1) (1,1) (2,2) (3,2)}
\closedcycle;
\addplot coordinates
{(0,1) (1,1) (2,2) (3,2)}
\closedcycle;
\addplot coordinates
{(0,1) (1,1) (2,2) (3,2)}
\closedcycle;
\end{axis}
\end{tikzpicture}
答案1
如果您只想将标签显示为月份(而不是同时使用月份作为坐标),则可以定义一个包含所需缩写的列表,并使用 将其用于标签中xticklabel={\pgfmathparse{<\listmacro>[Mod(\tick,12)]}\pgfmathresult}
。Mod
运算符确保列表“环绕”。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\def\monthnames{{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}}
\begin{tikzpicture}
\begin{axis}[
smooth,
stack plots=y,
area style,
enlarge x limits=false,
xtick=data,
xticklabel={\pgfmathparse{\monthnames[Mod(\tick,12)]}\pgfmathresult}]
\addplot coordinates
{(0,1) (1,1) (2,2) (3,2)}
\closedcycle;
\addplot coordinates
{(0,1) (1,1) (2,2) (3,2)}
\closedcycle;
\addplot coordinates
{(0,1) (1,1) (2,2) (3,2)}
\closedcycle;
\end{axis}
\end{tikzpicture}
\end{document}
如果您想使用月份名称作为符号坐标,则可以使用symbolic x coords={<list>}
。然后必须提供坐标如下(<month>,<value>)
:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
smooth,
stack plots=y,
area style,
enlarge x limits=false,
symbolic x coords={Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec},
xtick=data]
\addplot coordinates
{(Jan,1) (Feb,1) (Mar,2) (Apr,2)}
\closedcycle;
\addplot coordinates
{(Jan,1) (Feb,1) (Mar,2) (Apr,2)}
\closedcycle;
\addplot coordinates
{(Jan,1) (Feb,1) (Mar,2) (Apr,2)}
\closedcycle;
\end{axis}
\end{tikzpicture}
\end{document}
最后,您可以使用库来使用“真实”日期\pgfplotslibrary{dateplot}
。x 坐标必须采用 的形式YYYY-MM-DD
,您可以通过将它们包装在 中来获得非常强大的刻度标签日期格式选项pgfcalendar
。要使用缩写月份作为标签,您可以使用xticklabel={\pgfcalendar{tickcal}{\tick}{\tick}{\pgfcalendarshorthand{m}{.}}}
,其中.
代表缩写的文本标签。t
将是完整的月份名称,-
将是没有前导零的数字表示,0
将是有前导零的数字表示。详细信息可以在pgfmanual
部分中找到57.2、排版日历
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
smooth,
stack plots=y,
area style,
enlarge x limits=false,
date coordinates in=x,
xtick=data,
xticklabel={\pgfcalendar{tickcal}{\tick}{\tick}{\pgfcalendarshorthand{m}{.}}}]
\addplot coordinates
{(2011-1-1,1) (2011-2-1,1) (2011-3-1,2) (2011-4-1,2)}
\closedcycle;
\addplot coordinates
{(2011-1-1,1) (2011-2-1,1) (2011-3-1,2) (2011-4-1,2)}
\closedcycle;
\addplot coordinates
{(2011-1-1,1) (2011-2-1,1) (2011-3-1,2) (2011-4-1,2)}
\closedcycle;
\end{axis}
\end{tikzpicture}
\end{document}