我尝试从文件中创建一个包含日期和时间列的表格data.txt
。我可以创建一个图表,但是当我\pgfplotstabletypeset
为表格键入内容时,会出现以下错误:
! 包 pgfplots 错误:表 'data.txt' 似乎在第 1 行包含太多列:
我也尝试添加选项\pgfplotstabletypeset[col sep=comma]{data.txt}
。然后我收到此错误:
!PGF 软件包数学错误:无法将输入的“2015-09-13 21:00:00”解析为浮点数,抱歉。
我该如何解决这个问题?谢谢!
\documentclass{article}
\usepackage{pgfplotstable}
\usepgfplotslibrary{dateplot}
\pgfplotsset{compat=1.15}
\usepackage{filecontents}
\begin{filecontents*}{data.txt}
date, value
2015-09-13 21:00:00, 922
2015-09-13 22:00:00, 3993
2015-09-13 23:00:00, 3003
2015-09-14 00:00:00, 991
2015-09-14 01:00:00, 2021
2015-09-14 02:00:00, 841
2015-09-14 03:00:00, 2812
2015-09-14 14:00:00, 991
2015-09-14 15:00:00, 231
2015-09-14 16:00:00, 678
\end{filecontents*}
\begin{document}
\pgfplotstabletypeset[
columns/date/.style={date type={\day.\month.\year},
column name=Datum},
columns/date/.style={date type={\hour:\minute},
column name=Zeit},
columns/value/.style={column name=Value},
]{data.txt}
\end{document}
答案1
这里有两个问题:
首先,您需要使用col sep=comma
,因为这就是中列的分隔方式data.txt
。
第二,date type
不支持时间。因此命令\hour
和\minute
未定义。
如果您可以控制 的格式data.txt
,那么最简单的方法是将其更改为三列(date, time, value
)。如果您省略秒数,则该time
列已包含您想要的格式。
然后使用新列的列类型string type
,它将按原样打印内容(即,它不会被解析为数字)。
代码:
\documentclass{article}
\usepackage{pgfplotstable}
\usepgfplotslibrary{dateplot}
\pgfplotsset{compat=1.15}
\usepackage{filecontents}
\begin{filecontents*}{data.txt}
date, time, value
2015-09-13, 21:00, 922
2015-09-13, 22:00, 3993
2015-09-13, 23:00, 3003
2015-09-14, 00:00, 991
2015-09-14, 01:00, 2021
2015-09-14, 02:00, 841
2015-09-14, 03:00, 2812
2015-09-14, 14:00, 991
2015-09-14, 15:00, 231
2015-09-14, 16:00, 678
\end{filecontents*}
\begin{document}
\pgfplotstabletypeset[col sep=comma,
columns/date/.style={date type={\day.\month.\year},
column name=Datum},
columns/time/.style={string type,
column name=Zeit},
columns/value/.style={column name=Value},
]{data.txt}
\end{document}
如果您还想绘制数据,可以像这样制作四列:
dt, date, time, value
2015-09-13 21:00, 2015-09-13, 21:00, 922
在这种情况下,您必须向表中添加一列列表,因此第一个将被忽略:
\pgfplotstabletypeset[col sep=comma,
columns={date,time,value},