在 PGFplots 中将月份名称缩写为刻度标签

在 PGFplots 中将月份名称缩写为刻度标签

如何修改 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}

带有月份名称的 pgfplots

如果您想使用月份名称作为符号坐标,则可以使用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}

相关内容