movies = {
"流浪地球": [2.01, 4.59, 7.99, 11.83, 16],
"飞驰人生": [3.19, 5.08, 6.73, 8.1, 9.35],
"疯狂的外星人": [4.07, 6.92, 9.3, 11.29, 13.03],
"新喜剧之王": [2.72, 3.79, 4.45, 4.83, 5.11],
"廉政风云": [0.56, 0.74, 0.83, 0.88, 0.92],
"神探蒲松龄": [0.66, 0.95, 1.1, 1.17, 1.23],
"小猪佩奇过大年": [0.58, 0.81, 0.94, 1.01, 1.07],
"熊出没·原始时代": [1.13, 1.96, 2.73, 3.42, 4.05]
}
"""指定宽度"""
width = 0.75 # 每个大柱子的宽度
bin_width = width / 5 # 每个小柱子的宽度
index = range(len(movies)) # 索引刻度,刻度位置
"""构建每一天相关的电影数据"""
movie_data = list(movies.values())
# 构建每一天电影数据
every_day = [] # 存放所有数据
for i in range(len(movie_data[2])):
every_day.append([
movie_data[0][i], movie_data[1][i], movie_data[2][i], movie_data[3][i],
movie_data[4][i], movie_data[5][i], movie_data[6][i], movie_data[7][i]
])
plt.figure(figsize=(20, 8), dpi=100)
"""第一天的柱子上添加具体的数值"""
day_tickets_0 = every_day[0] # 取第一天的数值
day_tickets_1 = every_day[1]
day_tickets_2 = every_day[2]
day_tickets_3 = every_day[3]
day_tickets_4 = every_day[4]
xs_0 = [i - bin_width * 2 for i in index] # 绘制数据的位置
xs_1 = [i - bin_width for i in index]
xs_2 = [i for i in index]
xs_3 = [i + bin_width for i in index]
xs_4 = [i + bin_width * 2 for i in index]
plt.bar(xs_0,
every_day[0],
width=bin_width,
label="第一天")
plt.bar(xs_1,
every_day[1],
width=bin_width,
label="第二天")
plt.bar(xs_2,
every_day[2],
width=bin_width,
label="第三天")
plt.bar(xs_3,
every_day[3],
width=bin_width,
label="第四天")
plt.bar(xs_4,
every_day[4],
width=bin_width,
label="第五天")
for x, ticket in zip(xs_0, day_tickets_0):
# xytext:调整参数
plt.annotate(ticket, xy=(x, ticket), xytext=(x - 0.08, ticket + 0.1))
for x, ticket in zip(xs_1, day_tickets_1):
# xytext:调整参数
plt.annotate(ticket, xy=(x, ticket), xytext=(x - 0.08, ticket + 0.1))
for x, ticket in zip(xs_2, day_tickets_2):
# xytext:调整参数
plt.annotate(ticket, xy=(x, ticket), xytext=(x - 0.08, ticket + 0.1))
for x, ticket in zip(xs_3, day_tickets_3):
# xytext:调整参数
plt.annotate(ticket, xy=(x, ticket), xytext=(x - 0.08, ticket + 0.1))
for x, ticket in zip(xs_4, day_tickets_4):
# xytext:调整参数
plt.annotate(ticket, xy=(x, ticket), xytext=(x - 0.07, ticket + 0.1))
plt.xticks(index, movies.keys()) # 重新指定x轴
plt.legend()
plt.grid()
plt.show()