Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 传递给matplotlib.date2num:';str';对象没有属性';toordinal';_Python_Matplotlib_Timestamp - Fatal编程技术网

Python 传递给matplotlib.date2num:';str';对象没有属性';toordinal';

Python 传递给matplotlib.date2num:';str';对象没有属性';toordinal';,python,matplotlib,timestamp,Python,Matplotlib,Timestamp,从文本文件收集具有时间戳的数组(格式%Y-%M-%D%H:%M:%S)。我想用matplotlib在子图中绘制这些。但我不能让它工作。我在想: import numpy as np import datetime import matplotlib.pyplot as plt import matplotlib.dates as md dateconv = lambda s: datetime.strptime(s, '%Y-%M-%D %H:%M:%S:.%f') col_names =

从文本文件收集具有时间戳的数组(格式
%Y-%M-%D%H:%M:%S
)。我想用matplotlib在子图中绘制这些。但我不能让它工作。我在想:

import numpy as np
import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as md

dateconv = lambda s: datetime.strptime(s, '%Y-%M-%D %H:%M:%S:.%f')

col_names = ["timestamp", "light", "sensor1", "sensor2", "sensor3", "temp"]
dtypes = ["object", "uint8", "uint8", "uint8", "uint8", "float"]
mydata = np.genfromtxt("data.csv", delimiter=",", names = col_names, dtype=dtypes, converters={"Time": dateconv})


time = md.date2num(mydata['timestamp'])
sensor1 = mydata['sensor1']
sensor2 = mydata['sensor2']
sensor3 = mydata['sensor3']
light = mydata['light']
temp = mydata['temp']

fig = plt.figure()
rect = fig.patch
rect.set_facecolor('#31312e')

ax1 = fig.add_subplot(3,2,1, axisbg='grey')
ax1.plot_date(time, sensor1, 'c', linewidth=2)
ax1.tick_params(axis='x', colors='c')
ax1.tick_params(axis='y', colors='c')
ax1.spines['bottom'].set_color('w')
ax1.spines['top'].set_color('w')
ax1.spines['left'].set_color('w')
ax1.spines['right'].set_color('w')
ax1.yaxis.label.set_color('c')
ax1.xaxis.label.set_color('c')
ax1.set_title('Sensor 1', color = 'c')
ax1.set_xlabel('Time')
ax1.set_ylabel('Value')
ax1.set_ylim(0, 255)

ax2 = fig.add_subplot(3,2,2, axisbg='grey')
#so on...

plt.setp(ax1.xaxis.get_majorticklabels(), rotation = 25)
plt.show()
但它不工作,我得到以下错误:
'str'对象在第18行没有属性'toordinal'
(带有
md.date2num的行(mydata['timestamp'

数据样本:

2014-08-12 22:45:12.826871, 65, 244, 213, 196, 21.625
2014-08-12 22:50:14.151601, 66, 246, 208, 196, 21.312
2014-08-12 22:55:15.399692, 15, 247, 208, 196, 21.375
2014-08-12 23:00:16.717546, 15, 248, 209, 195, 21.5
2014-08-12 23:05:18.041433, 15, 249, 212, 195, 21.625
2014-08-12 23:10:19.372733, 16, 248, 216, 195, 21.687

首先,您的格式字符串错误。请看:

%M分钟作为零填充十进制数

而且%D根本不存在

第二,为什么要使用?o_0?为什么不将它们存储为普通的datetime对象,并按照您的意愿存储

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

time_format = '%Y-%m-%d %H:%M:%S.%f'

col_names = ["timestamp", "light", "sensor1", "sensor2", "sensor3", "temp"]
dtypes = ["object", "uint8", "uint8", "uint8", "uint8", "float"]
mydata = np.genfromtxt("data.csv", delimiter=",", names=col_names, dtype=dtypes)

time = [datetime.strptime(i, time_format) for i in mydata['timestamp']]
sensor1 = mydata['sensor1']

fig = plt.figure()
rect = fig.patch
rect.set_facecolor('#31312e')

ax1 = fig.add_subplot(3, 2, 1, axisbg='grey')
ax1.plot_date(time, sensor1, 'c', linewidth=2)
ax1.tick_params(axis='x', colors='c')
ax1.tick_params(axis='y', colors='c')
ax1.spines['bottom'].set_color('w')
ax1.spines['top'].set_color('w')
ax1.spines['left'].set_color('w')
ax1.spines['right'].set_color('w')
ax1.yaxis.label.set_color('c')
ax1.xaxis.label.set_color('c')
ax1.set_title('Sensor 1', color='c')
ax1.set_xlabel('Time')
ax1.set_ylabel('Value')
ax1.set_ylim(0, 255)

ax2 = fig.add_subplot(3, 2, 2, axisbg='grey')
# so on...

plt.setp(ax1.xaxis.get_majorticklabels(), rotation=25)
plt.show()

我认为您的日期转换器实际上没有工作。该列似乎仍然是字符串,而不是
datetime
对象。您可以发布一些示例数据吗?(5-10行就足够了)