如何以日期格式和百分比格式化从文件输入的日期?

如何以日期格式和百分比格式化从文件输入的日期?

我在 csv 文件中有包含元组(日期、百分比)的输入:(日期是整数,44 000 <-> 2020 年 6 月 18 日)

date,pct
44755,0.01925374
44756,0.01925374
44757,0.01925374
[...]
44768,0.018989264
44769,0.018989264

我使用以下乳胶代码加载和绘制它。

\documentclass[11pt, a4paper]{article}
\usepackage{pgfplots}
\usepackage{tikz} 


\begin{document}


    \begin{tikzpicture}

        \centering   
        \begin{axis}[
            width = \textwidth,
            height = 0.5\textheight,
            xlabel = {$$},
            xtick = data,
            xticklabel style={ rotate=+45},
             ymin = 0.01, ymax =0.02,       
            ytick distance = 0.01,
                ]
         % Plot data from a file
        \addplot[
            blue,
        ] table [x=date, y=pct, col sep = comma]{data.csv};
        \addlegendentry{Data} 
        \end{axis}
     
    \end{tikzpicture}


\end{document}

如何将 xaxis 格式化为日期“dd-mmm-yy”,将 yaxis 格式化为百分比“0.00%”

答案1

您可以使用xticklabelyticklabel选项将您想要的任何内容放入标签中。首先,您可以使用 删除科学记数法scaled ticks=false

对于百分比,您可以简单地将 100 与\tick存储当前刻度值的变量相乘,然后通过以下方式将此计算的结果(添加百分号)输出到标签yticklabel(参见:轴上有百分比的 pgfplots)。

为了获得正确的日期格式,你可以利用calendarTi 附带的库Z. 使用该命令,\pgfcalendarjuliantodate您可以从给定的整数计算出日期(更准确地说,分别是年、月和日的三个值,可以存储在三个命令中)。我们可以再次通过值\tick(我们需要将其转换为整数)获取此整数,并将魔术数字 2415019 添加到其中,以将 44000 的值与日期 2020-06-18 同步(我使用它\numexpr进行计算是因为 TiZ 会遇到尺寸过大的错误,但无论如何我们这里只需要整数计算,这可以直接由 TeX 完成)。

\documentclass[]{article}
\usepackage{pgfplots}
\usetikzlibrary{calendar}
\pgfplotsset{compat=newest}

\begin{filecontents}{data.csv}
date,pct
44755,0.01925374
44756,0.01925374
44757,0.01925374
44768,0.018989264
44769,0.018989264
\end{filecontents}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            width=\textwidth,
            height=0.5\textheight,
            xlabel={$x$},
            xtick=data,
            xticklabel style={
                rotate=45,
                anchor=north east
            },
            xticklabel={%
                \pgfmathparse{int(\tick)}%
                \pgfcalendarjuliantodate{\numexpr\pgfmathresult+2415019\relax}%
                    {\myyear}{\mymonth}{\myday}%
                \myday-\pgfcalendarmonthshortname{\mymonth}-\myyear%
            },
            ymin=0.01, ymax=0.02,       
            ytick distance=0.01,
            yticklabel={%
                \pgfmathparse{\tick*100}%
                \pgfkeys{/pgf/number format/fixed zerofill, /pgf/number format/precision=2}%
                \pgfmathprintnumber{\pgfmathresult}\,\%%
            },
            scaled ticks=false,
        ]
        % Plot data from a file
        \addplot[
            blue,
        ] table [x=date, y=pct, col sep=comma] {data.csv};
        \addlegendentry{Data} 
        \end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容