Python 如何创建表示每天多个时间invervals的图形

Python 如何创建表示每天多个时间invervals的图形,python,matplotlib,graph,Python,Matplotlib,Graph,考虑到每天包含成对的开放/关闭时间的以下dict: 时间表={ “星期一”:['08:00'、'12:00'、'13:00'、'18:00'], ‘星期二’:[‘08:00’、‘12:00’、‘13:00’、‘18:00’], “星期三”:['08:00'、'12:00'、'13:00'、'18:00'], ‘星期四’:[‘08:00’、‘12:00’、‘13:00’、‘18:00’], ‘星期五’:[‘08:00’、‘12:00’、‘13:00’、‘18:00’、‘19:00’、‘23:00’

考虑到每天包含成对的开放/关闭时间的以下
dict

时间表={
“星期一”:['08:00'、'12:00'、'13:00'、'18:00'],
‘星期二’:[‘08:00’、‘12:00’、‘13:00’、‘18:00’],
“星期三”:['08:00'、'12:00'、'13:00'、'18:00'],
‘星期四’:[‘08:00’、‘12:00’、‘13:00’、‘18:00’],
‘星期五’:[‘08:00’、‘12:00’、‘13:00’、‘18:00’、‘19:00’、‘23:00’],
“星期六”:[“10:00”,“16:00”],
“星期日”:[“10:00”,“16:00”],
}

有没有一种方法可以创建这样的图形表示(这是通过gimp完成的,只是为了大致了解它的外观)?

尝试类似的方法

import matplotlib.pyplot as plt
import datetime
timetable = {
  'monday': ['08:00', '12:00', '13:00', '18:00'],
  'tuesday': ['08:00', '12:00', '13:00', '18:00'],
  'wednesday': ['08:00', '12:00', '13:00', '18:00'],
  'thursday': ['08:00', '12:00', '13:00', '18:00'],
  'friday': ['08:00', '12:00', '13:00', '18:00', '19:00', '23:00'],
  'saturday': ['10:00', '16:00'],
  'sunday': ['10:00', '16:00'],
}
COLOR_LIST = ['blue', 'red', 'green', 'pink', 'brown', 'orange', 'yellow']
HEIGHT = 2
fig, ax = plt.subplots()
y_parameter = 0
for day, day_data in timetable.iteritems():
    st = [datetime.datetime.strptime(i, "%H:%M") for i in day_data[::2]]
    et = [datetime.datetime.strptime(i, "%H:%M") for i in day_data[1::2]]
    color = COLOR_LIST.pop()
    for start_time, end_time in zip(st, et):
        diff = (end_time - start_time).total_seconds()
        x_paramter = datetime.timedelta(hours=start_time.hour, minutes=start_time.minute,
                                    seconds=start_time.second).total_seconds()
        ax.add_patch(plt.Rectangle((x_paramter, y_parameter), int(diff), HEIGHT, facecolor=color))
        centerx = x_paramter + 100
        centery = y_parameter + 1
        plt.text(centerx, centery, day, fontsize=5, wrap=True)
        plt.text(centerx, centery - 1, str(int(diff)), fontsize=5, wrap=True)
    ax.autoscale()
    ax.set_ylim(0, 24)
    y_parameter += 3
plt.show()
输出类似于:


试试这样的方法

import matplotlib.pyplot as plt
import datetime
timetable = {
  'monday': ['08:00', '12:00', '13:00', '18:00'],
  'tuesday': ['08:00', '12:00', '13:00', '18:00'],
  'wednesday': ['08:00', '12:00', '13:00', '18:00'],
  'thursday': ['08:00', '12:00', '13:00', '18:00'],
  'friday': ['08:00', '12:00', '13:00', '18:00', '19:00', '23:00'],
  'saturday': ['10:00', '16:00'],
  'sunday': ['10:00', '16:00'],
}
COLOR_LIST = ['blue', 'red', 'green', 'pink', 'brown', 'orange', 'yellow']
HEIGHT = 2
fig, ax = plt.subplots()
y_parameter = 0
for day, day_data in timetable.iteritems():
    st = [datetime.datetime.strptime(i, "%H:%M") for i in day_data[::2]]
    et = [datetime.datetime.strptime(i, "%H:%M") for i in day_data[1::2]]
    color = COLOR_LIST.pop()
    for start_time, end_time in zip(st, et):
        diff = (end_time - start_time).total_seconds()
        x_paramter = datetime.timedelta(hours=start_time.hour, minutes=start_time.minute,
                                    seconds=start_time.second).total_seconds()
        ax.add_patch(plt.Rectangle((x_paramter, y_parameter), int(diff), HEIGHT, facecolor=color))
        centerx = x_paramter + 100
        centery = y_parameter + 1
        plt.text(centerx, centery, day, fontsize=5, wrap=True)
        plt.text(centerx, centery - 1, str(int(diff)), fontsize=5, wrap=True)
    ax.autoscale()
    ax.set_ylim(0, 24)
    y_parameter += 3
plt.show()
输出类似于:


检查此SO问题:检查此SO问题:您好,谢谢您的回答。我(作为Python初学者)特别感兴趣的是,您使用切片操作符获取
st
et
的方法。如何处理交换
x
y
轴,以便在
x
轴上有天数?至于滴答声,您如何设置标签分别表示小时(假设HH:MM不是简单的
int
)和天?@user11392621您必须使用它:)这是可行的:)您好,谢谢您的回答。我(作为Python初学者)特别感兴趣的是,您使用切片操作符获取
st
et
的方法。如何处理交换
x
y
轴,以便在
x
轴上有天数?至于刻度,您将如何设置标签分别表示小时(假设HH:MM不是简单的
int
)和天?@user11392621您将不得不使用它:)这是可行的:)