如何在python

时间:2016-05-05 17:38:12

标签: python matplotlib plot

我有两个名单:

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()

enter image description here

1 个答案:

答案 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()