![如何以日期格式和百分比格式化从文件输入的日期?](https://linux22.com/image/467159/%E5%A6%82%E4%BD%95%E4%BB%A5%E6%97%A5%E6%9C%9F%E6%A0%BC%E5%BC%8F%E5%92%8C%E7%99%BE%E5%88%86%E6%AF%94%E6%A0%BC%E5%BC%8F%E5%8C%96%E4%BB%8E%E6%96%87%E4%BB%B6%E8%BE%93%E5%85%A5%E7%9A%84%E6%97%A5%E6%9C%9F%EF%BC%9F.png)
我在 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
您可以使用xticklabel
和yticklabel
选项将您想要的任何内容放入标签中。首先,您可以使用 删除科学记数法scaled ticks=false
。
对于百分比,您可以简单地将 100 与\tick
存储当前刻度值的变量相乘,然后通过以下方式将此计算的结果(添加百分号)输出到标签yticklabel
(参见:轴上有百分比的 pgfplots)。
为了获得正确的日期格式,你可以利用calendar
Ti 附带的库钾Z. 使用该命令,\pgfcalendarjuliantodate
您可以从给定的整数计算出日期(更准确地说,分别是年、月和日的三个值,可以存储在三个命令中)。我们可以再次通过值\tick
(我们需要将其转换为整数)获取此整数,并将魔术数字 2415019 添加到其中,以将 44000 的值与日期 2020-06-18 同步(我使用它\numexpr
进行计算是因为 Ti钾Z 会遇到尺寸过大的错误,但无论如何我们这里只需要整数计算,这可以直接由 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}