我有两个名单:
time_str = ['06:03' '06:03' '06:04' ..., '19:58' '19:59' '19:59']
value = ['3.25' '3.09' '2.63' ..., '2.47' '2.57' '2.40']
我尝试了以下代码,但收到了错误:
plt.plot(time_str,value)
plt.xlabel('Time')
plt.show()
ValueError:float()的文字无效:06:00
如何在x_axis上绘制time_str,在y轴上绘制值。 time_str具有每分钟的值,也许我们可以在x轴上每15分钟显示一次。我尝试了几种方法,但我无法正确获得线图。谁能建议
编辑: 经过一些试验,我有这个代码,但我没有在轴上有适当的标签(看起来好像python只是试图抓一些东西):
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.xaxis.set_major_locator(md.MinuteLocator(interval=15))
ax.xaxis.set_major_formatter(md.DateFormatter('%H:%M'))
plt.plot(y)
plt.xticks(range(len(x)), x)
plt.show()
答案 0 :(得分:1)
您可以使用numpy的数组切片和索引(http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing-and-indexing)来绘制每个第i个值
#only plot every 15th value
plt.plot(time_str[::15], value[::15])
回答问题更新
值错误与列表的大小无关。您需要将字符串转换为日期时间对象。类似的东西:
from datetime import datetime
times = [datetime.strptime(time, '%I:%M') for time in time_str]
回应评论
你必须根据自己的需要调整它,但使用面具将是每15分钟最简单的方法
import matplotlib.pyplot as plt
from datetime import datetime
import numpy as np
time_str = ['06:03', '06:18', '06:28', '19:33', '19:03', '19:59']
value = np.array(['3.25', '3.09', '2.63', '2.47', '2.57', '2.40'])
times = np.array([datetime.strptime(time, '%H:%M') for time in time_str])
time_deltas = np.array([(time - times[0]).total_seconds()/60. for time in times])
plt_times = times[time_deltas%15==0]
plt_values = value[time_deltas%15==0]
plt.plot_date(plt_times, plt_values)
plt.show()