如何通过读取文本文件中的数据来绘制图形

如何通过读取文本文件中的数据来绘制图形

我想从文本文件中读取数据并绘制 XY 图。但是,我的文本文件中的问题是,我没有任何列中的数据。这是您在所附屏幕截图中看到的东西。每秒每个参数都有不同的值。因此,整个文件大约为 6629 秒。我想绘制任意选定的 2 个参数之间的图表,例如Vehicle SpeedCO2masswet。我尝试谷歌搜索但找不到任何东西。有人能帮助我吗?提前致谢。

在此处输入图片描述

答案1

这不完全是你想要的,但有些人可能会感兴趣。(你已将问题标记为,我不确定是否可以在 ShareLaTeX 上使用此解决方案。不过在 Overleaf 上绝对可以,请参阅https://www.overleaf.com/read/byrgzftndfmq它需要使用自定义latexmkrc文件,我从https://www.overleaf.com/latex/examples/using-pythontex-on-overleaf/qfjttkyfdtyt

使用 Python 解析这样的文件非常容易。我确信可以使用 Lua 等语言来完成,因此使用 LuaTeX 的解决方案是可行的。如果也可以使用纯 (La)TeX 来完成,我也不会感到惊讶。

不过,我更喜欢用 Python,所以下面的代码使用该pythontex包来实现这一点。当然,安装 Python 也是必需的。

我制作了一个名为的示例数据文件mydata.dat,如下所示:

================================
======== Time = 0Sec ==========
Distance = 0
speed = 0
temperature = 0
================================
======== Time = 2Sec ==========
Distance = 1
speed = 2
temperature = 0.1
================================
======== Time = 4Sec ==========
Distance = 3
speed = 5
temperature = 0.3

据我所知,这与您的数据文件的格式相匹配,尽管我不知道时间步之间发生了什么。我假设时间步之间的唯一分隔符是所有行=

因为这使用了pythontex,所以需要额外的编译步骤。即,您需要运行

pdflatex test
pythontex test
pdflatex test

您的.tex文件名为test.tex。以下代码的输出为

在此处输入图片描述

因此,我首先要做的是将整个数据文件读入名为 的字典中data。然后我定义一个 Python 函数,该函数打印出\addplot coordinates {(x1,y1)(x2,y2)...};,其中包含基于数据的坐标。我在 的axis环境中使用此函数pgfplots,如\py|printplot('xvar','yvar')|

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{
  compat=1.14,
  width=6cm,
  height=5cm
}
\usepackage{pythontex}
\begin{document}
\begin{pycode}
from collections import defaultdict
data = defaultdict(list)
with open('mydata.dat') as dd:
    for line in dd:
        if line.startswith('='):
            if 'Time' in line:
                data['Time'] += [line.split()[3][:-3]]
        else:
            key, _, val = line.split()
            data[key] += [val]

def printplot(key1,key2,plotargs=None):
    coords = ''.join(['({0},{1})'.format(x,y)
        for x,y in zip(data[key1],data[key2])])
    if plotargs is None:
        plot = r'\addplot coordinates {' + coords + '};'
    else:
        plot = r'\addplot' + plotargs + ' coordinates {' + coords + '};'

    print(plot)        

\end{pycode}
\begin{tikzpicture}
\begin{axis}[
  xlabel=Distance,
  ylabel=Speed,
  title={Speed vs.\@ distance},
  ]
\py|printplot('Distance','speed')|
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[
  xlabel=Time,
  ylabel=Temperature,
  title={Temperature vs.\@ time}
  ]
\py|printplot('Time','temperature',plotargs='+[red,thick,mark=x]')|
\end{axis}
\end{tikzpicture}
\end{document}

相关内容