在matplotlib图上添加任意一行,在x轴上显示日期时间

时间:2017-09-26 09:53:55

标签: python datetime matplotlib plot

我找到了一种在matplotlib图中绘制线条(不必垂直或水平)的方法:This建议使用

plt.plot([2, 3], [25, 10])

但是,这对于x轴上具有日期时间的绘图无效。

我得到" ValueError:序数必须是> = 1"以下代码中的所有尝试。

import matplotlib.pyplot as plt
from calendar import monthrange
import datetime

def get_datetime_range(year, month): # Create a list with all days in a month
    nb_days = monthrange(year, month)[1]
    return [datetime.date(year, month, day) for day in range(1, nb_days+1)]    

# Create sample data
date = get_datetime_range(2017, 9)
value = [d.day % 12 for d in date]

# Draw
plt.plot(date, value)

plt.axvline(date[10], color='r', zorder=0) # Vertical line works

m = len(date)-1
print("Draw line from [%s, %s] to [%s, %s]." % (date[0], value[0], date[m], value[m]))

# The following does NOT work

plt.plot_date([date[0], value[0]], 
              [date[m], value[m]]) # Gives ValueError: ordinal must be >= 1

#plt.plot([date[10], 1], 
#         [date[25], 20])


#plt.plot_date([date2num(date[0]), value[0]], 
#              [date2num(date[m]), value[m]])

#plt.plot([2, 3], [25, 10])

plt.plot()

我还尝试将日期时间转换为date2num的数字但没有成功(相同的错误):

from matplotlib.dates import date2num

dateNum = [date2num(d) for d in date]
plt.plot(dateNum, value) # Works

plt.axvline(date[10], color='r', zorder=0) # Works

plt.plot_date([date2num(date[0]), value[0]],  
              [date2num(date[m]), value[m]]) # Gives ValueError: ordinal must be >= 1

任何帮助?

2 个答案:

答案 0 :(得分:0)

格式为$_SERVER['DOCUMENT_ROOT'] 。在您的代码中,您有plot([x1, x2, x3, ...], [y1, y2, y3, ...]),这是不正确的。

用以下代码替换您的代码:

plot_date([x1, y1], [x2, y2])

解决了这个问题。

但请注意,that the default behavior of plot_date()是绘制点(plt.plot_date([date[0], date[m]], [value[0], value[m]]) )而不是线。如果您想要一条线,就像您的代码所暗示的那样,您需要更改格式参数:

fmt='o'

答案 1 :(得分:0)

问题出现是因为你的坐标顺序略有错误。用:

set foreign_key_checks = true;

您说x坐标为plt.plot_date([date[0], value[0]], [date[m], value[m]]) date[0]。而您的x坐标实际上是value[0]date[0]。因此,您应该使用:

date[m]

完整代码:

plt.plot_date([date[0],date[m]],
              [value[0], value[m]])

给出以下图表:

enter image description here