我有一个如下所示格式的数据集,它是R
使用export.table()
函数导出的。我想使用 pgfplots 制作一个 XY 图,其中x=time
、 和y=value
,并且点使用直线连接,每个点都没有任何符号。
no date time value
1 2015-09-14 21:00:00 922
2 2015-09-14 22:00:00 3993
3 2015-09-14 23:00:00 3003
4 2015-09-14 00:00:00 991
5 2015-09-14 01:00:00 2021
6 2015-09-14 02:00:00 841
7 2015-09-14 03:00:00 2812
8 2015-09-14 14:00:00 991
9 2015-09-14 15:00:00 231
10 2015-09-14 16:00:00 678
这是我尝试创建的最小工作示例,它在没有日期/时间字段(第二个数据集)的情况下也能正常工作,但在包含日期/时间的第一个数据集的情况下会出现问题。
% This produces errors with the first dataset, but works fine with the second
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary[statistics]
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
% fixes the second problem
\pgfplotsset{every axis/.append style={ultra thin}}
\begin{axis}[xlabel=time, ylabel=Value]
\addplot table[x=time,y=value]{data.txt};
\end{axis}
\end{tikzpicture}
\end{document}
我有这些问题:
第一的:我无法使用 pgfplots 读取数据。我收到此错误:
! Package PGF Math Error: Could not parse input '2015-09-14' as a floating poin
t number, sorry. The unreadable part was near '-09-14'..
我可以重新导出数据,R
使其具有适合 pgfplots 的格式,如果需要,可能是 CSV。但什么是合适的格式?
已修复,不知何故:
第二:数据包含 >1000 个元素。我不知道 pgfplots 为每个点使用的默认大点的输出结果会是怎样。我找不到任何 pgfplots 高频数据的示例。我的数据如下所示:
第三:某些时间段缺少数据,这在 R 图上清晰可见。这是因为在R
时间间隔之前的最后一个值处画一条线,留出与时间间隔相等的空间,并将其连接到时间间隔之后的第一个值。这很好地表明存在时间间隔。我不知道我是否可以在 pgfplots 中实现这样的功能。
如果您想测试代码,该代码实际上可以在以下数据集上运行良好:
time value
1 922
2 3993
3 3003
4 991
5 2021
6 841
7 2812
8 991
9 231
10 678
答案1
您需要使用dateplot
库来读取日期,请参阅 v1.12 手册第 331 页。您还需要将文件保存为 CSV。然后,以下 MWE 将绘制您列出的第一个数据集。请注意,键date coordinates in=x
指示在命令的坐标pgfplots
指定的列中查找日期信息。此外,将日期和时间读取为一列,而不是单独的列。您也可以通过调整该键来调整打印方式;请参阅手册中的指定页面。x
\addplot
pgfplots
xticklabel
此外,您可以通过设置命令上的选项来控制特定图的选项\addplot
。我输入了+[no markers]
,它告诉 pgfplots 仅覆盖我提供给命令的选项,但保留所有其他选项(例如颜色、厚度等)。如果没有+
,仅有的将设置指定的选项,所有其他选项将为默认值(例如,颜色为黑色等)。
对于您的第三个问题,最好每篇帖子发布一个问题,因此您应该采取这里对您有用的方法,并提出一个新问题,具体说明如何处理数据中的缺口。此外,请务必定义“缺口”应该有多长。
最后,pgfplots
自动加载,tikz
所以没有理由加载后者,我使用该filecontents
包来制作一个独立的示例。
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot, statistics}
\pgfplotsset{compat=1.12}
\usepackage{filecontents}
\begin{filecontents*}{data.txt}
no, date, value
1, 2015-09-13 21:00:00, 922
2, 2015-09-13 22:00:00, 3993
3, 2015-09-13 23:00:00, 3003
4, 2015-09-14 00:00:00, 991
5, 2015-09-14 01:00:00, 2021
6, 2015-09-14 02:00:00, 841
7, 2015-09-14 03:00:00, 2812
8, 2015-09-14 14:00:00, 991
9, 2015-09-14 15:00:00, 231
10, 2015-09-14 16:00:00, 678
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=time, ylabel=Value, date coordinates in=x, table/col sep=comma, date ZERO=2015-09-13, xticklabel=\day. \hour:\minute, xticklabel style={rotate=90, anchor=near xticklabel}]
\addplot+[no markers] table[x=date,y=value] {data.txt};
\end{axis}
\end{tikzpicture}
\end{document}