繁体   English   中英

使用File中的python matplotlib绘制时间和浮点值

[英]Plotting Time and float value using python matplotlib from File

我有一个带有时间和浮点值的文本文件。 我听说可以使用matplotlib绘制这两列。 搜索了相似的线程,但无法实现。 我的代码和数据是-

import math
import datetime
import matplotlib
import matplotlib.pyplot as plt
import csv
with open('MaxMin.txt','r') as f_input:
csv_input = csv.reader(f_input, delimiter=' ',     skipinitialspace=True)
        x = []
        y = []
        for cols in csv_input:
            x = matplotlib.dates.date2num(cols[0])
            y = [float(cols[1])]
# naming the x axis 
plt.xlabel('Real-Time') 
# naming the y axis 
plt.ylabel('Acceleration (m/s2)') 
# giving a title to my graph 
plt.title('Accelerometer reading graph!')
# plotting the points 
plt.plot(x, y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
# function to show the plot 
plt.show()

以及MaxMin.txt中的部分数据

23:28:30.137 10.7695982757
23:28:30.161 10.4071263594
23:28:30.187 9.23969855461
23:28:30.212 9.21066485657
23:28:30.238 9.25117645762
23:28:30.262 9.59227680741
23:28:30.287 9.9773536301
23:28:30.312 10.0128275058
23:28:30.337 9.73353441664
23:28:30.361 9.75064993988
23:28:30.387 9.717339267
23:28:30.412 9.72736788911
23:28:30.440 9.62451269364

我是Python和Windows 10 Pro(64位)中python 2.7.15的初学者。 我已经安装了numpy,scipy scikit-learn。 请帮忙。

来自完整数据集的最终输出图。 谢谢@ ImportanceOfBeingErnest

您可以使用熊猫来实现此目的,首先以.csv格式存储文件:

import math
import datetime
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd #### import this library

df = pd.read_csv("path_to_file.csv", delimiter=' ', encoding='latin-1') 

x = df.ix[:,0]
y = df.ix[:,1]
# naming the x axis 
plt.xlabel('Real-Time') 
# naming the y axis 
plt.ylabel('Acceleration (m/s2)') 
# giving a title to my graph 
plt.title('Accelerometer reading graph!')
# plotting the points 
plt.plot(x, y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
# function to show the plot 
plt.show()

如果第一个库没有数据时间格式,则可以将其转换为df.ix[:,0] = pd.to_datetime(df.ix[:,0])这样的格式df.ix[:,0] = pd.to_datetime(df.ix[:,0])并以小时为例:

df.ix[:,0] = df.ix[:,0].map(lambda x: x.hour)

运行代码后的输出如下:

在此处输入图片说明

您在原始尝试中犯的错误实际上很小。 您无需重新定义循环中的值,而是重新定义它们。 另外,您将需要使用datestr2num而不是date2num ,因为读入的字符串还不是日期。

import matplotlib
import matplotlib.pyplot as plt
import csv
with open('MaxMin.txt','r') as f_input:
    csv_input = csv.reader(f_input, delimiter=' ', skipinitialspace=True)
    x = []
    y = []
    for cols in csv_input:
        x.append(matplotlib.dates.datestr2num(cols[0]))
        y.append(float(cols[1]))
# naming the x axis 
plt.xlabel('Real-Time') 
# naming the y axis 
plt.ylabel('Acceleration (m/s2)') 
# giving a title to my graph 
plt.title('Accelerometer reading graph!')
# plotting the points 
plt.plot_date(x, y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
# function to show the plot 
plt.show()

在此处输入图片说明

我对如何简化此操作的建议是使用numpy并将输入转换为datetime。

from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt

x,y= np.loadtxt('MaxMin.txt', dtype=str, unpack=True)
x = np.array([datetime.strptime(i, "%H:%M:%S.%f") for i in x])
y = y.astype(float)

plt.plot(x,y)
plt.gcf().autofmt_xdate()
plt.show()

关于轴的滴答声:为了有蜱每半秒钟可以使用MicrosecondLocator有50万的区间。

import matplotlib.dates

# ...

loc = matplotlib.dates.MicrosecondLocator(500000)
plt.gca().xaxis.set_major_locator(loc)
plt.gca().xaxis.set_major_formatter(matplotlib.dates.AutoDateFormatter(loc))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM