使用 gnuplot 在 pgfplot 中绘制日期时间图

使用 gnuplot 在 pgfplot 中绘制日期时间图

我有一个包含多列的大型数据文件,其中第一列是格式为“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}

相关内容