我有一个包含多列的大型数据文件,其中第一列是格式为“yyyy-mm-dd hh:MM”的日期和时间,其余的是不同变量的数值。我经常有几天的数据,以 1 秒为采样率。这就是为什么我想使用 gnuplots 而不是使用 TeX 绘制它的原因。图形选项是我可以追求的另一个选项,但我更喜欢使用 gnuplots。
我正在尝试在 gnuplot 中绘制这些数据pgfplots
,但遇到了一些问题。为了简单起见,请考虑这个缩短的数据文件 (datafile.dat):
2012-06-01, 01:00, 1
2012-06-01, 02:00, 2
2012-06-01, 03:00, 4
2012-06-01, 04:00, 3
2012-06-02, 01:00, 5
2012-06-02, 02:00, 2
2012-06-02, 03:00, 1
2012-06-02, 04:00, 1
在 gnuplot 中,我可以使用以下几行绘制这些数据:
set xdata time
set timefmt '%Y-%m-%d, %H:%M'
set datafile sep ','
plot 'datafile.dat' u 1:3 w lines
我现在正尝试在 pgfplots 中绘制相同的数据使用 gnuplot但我没有成功。 是否可以将 pgfplots 中的 dateplot 库与 gnuplot 一起使用?
嗨,克里斯蒂安。当然可以。这是我的 TeX 文件:
\documentclass[border=5mm]{standalone}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.8}
\usepgfplotslibrary{dateplot}
\makeatletter
{
\catcode`\%=12
\catcode`\"=12
\xdef\pgf@gnuplot@head{set table \noexpand\pgf@plottablefile@quoted; set xdata time; set timefmt "%Y-%m-%d, %H:%M"; set datafile sep ',';}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{axis} [width=21cm, height=14cm,
date coordinates in=x,
]
\addplot gnuplot[raw gnuplot, id=testMe, mark=none] {
plot "datafile.dat" using ($1):($3) with lines;
};
\end{axis}
\end{tikzpicture}
\end{document}
这是生成的 gnuplot 文件:
set table "gnu_test.testMe.table"; set xdata time; set timefmt "%Y-%m-%d, %H:%M"; set datafile sep ',';
set format "%.7e";; plot "datafile.dat" using ($1):($3) with lines;
以下是生成的 gnuplot 表:
# Curve 0 of 1, 8 points
# Curve title: ""datafile.dat" using ($1):($3)"
# x y type
"" 1.0000000e+000 i
"" 2.0000000e+000 i
"" 4.0000000e+000 i
"" 3.0000000e+000 i
"" 5.0000000e+000 i
"" 2.0000000e+000 i
"" 1.0000000e+000 i
"" 1.0000000e+000 i
答案1
gnuplot
似乎没有生成任何有效的x
坐标(只有无用的字符串),并且pgfplots
因此而受阻。我尝试了一次尝试,但未能相应地重新配置 gnuplot。
如果您无法gnuplot
写出合适的x
坐标,我认为解决方案是手动调用 gnuplot(或通过写入\immediate\write18{<system call>}
),然后使用它pgfplots
来读取结果表。
请注意,您的时间格式似乎还有一个小问题:其中的逗号timefmt
是无用的,因为它也是一个列分隔符。
我不太明白gnuplot
这个例子中的目的。也许你需要的是运行gnuplot
,让它生成一些数值 x 坐标,读入pgfplots
并分配合适的 x 刻度标签。
但是,pgfplots
似乎对您的文件做了合理的处理,我想将其包括在这里 - 但可能会遗漏您的问题的中心点:
\documentclass[border=5mm]{standalone}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.8}
\usepgfplotslibrary{dateplot}
\begin{document}
\begin{tikzpicture}
\begin{axis} [width=21cm, height=14cm,
date ZERO=2012-06-01,
date coordinates in=x,
max space between ticks=70pt,
xticklabel=\month-\day\space\Hour:\Minute,
]
\addplot table[col sep=comma] {datafile.dat};
\end{axis}
\end{tikzpicture}
\end{document}