个人笔记-Matplotlib分组柱状图

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值