upai小新 2022-04-20 14:50 采纳率: 100%
浏览 140
已结题

python 画双柱状图和折线图的组合图报错的问题

问题遇到的现象和发生背景

这是我的数据

img


想要画这样的图

img


根据教程

img


在我自己敲代码时候发现有一行报错

    x=data.月份
    y1=data.上期
    y2=data.本期
    y3=data.同比增长率
    plt.figure(figsize=(8, 140))
    plt.subplot(111)
    bar_width = 0.4   # 设置柱状高度
    # 在主坐标轴绘制柱形图
    plt.bar(x, y1, bar_width, label="2022年")
    plt.bar(x+str(bar_width), y2, bar_width, label="2021年")#str(bar_width)
    plt.ylim(0, max(y1.max(), y3.max()) * 1.2) # 设置坐标轴的取值范围,避免柱子过高而与图例重叠
    plt.legend(loc='upper left')   # 设置图例
    plt.xticks(x) # 设置横坐标的标签

发现 plt.bar(x+bar_width, y2, bar_width, label="2021年")报错,报错内容为

img


将该代码更正为
plt.bar(x+str(bar_width), y2, bar_width, label="2021年")
发现图显示为

img


我希望图是这样的

我想要达到的结果

img

附全部代码

from pylab import mpl
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
htnames=["全院分月诊疗人次同期对比","1院区分月诊疗人次同期对比","2院区分月诊疗人次同期对比",
         "全院出院人次分月同期对比","1院区出院人次分月同期对比","2院区出院人次分月同期对比"]
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 正确显示中文
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
plt.rcParams.update({'font.size': 16})  # 设置字体大小
for i in htnames:
    data=pd.read_excel("画图数据.xlsx",header=1,sheet_name=i)#,index_col=0
    x=data.月份
    y1=data.上期
    y2=data.本期
    y3=data.同比增长率
    plt.figure(figsize=(8, 140))
    plt.subplot(111)
    bar_width = 0.4   # 设置柱状高度
    # 在主坐标轴绘制柱形图
    plt.bar(x, y1, bar_width, label="2022年")
    plt.bar(x+str(bar_width), y2, bar_width, label="2021年")#str(bar_width)
    plt.ylim(0, max(y1.max(), y3.max()) * 1.2) # 设置坐标轴的取值范围,避免柱子过高而与图例重叠
    plt.legend(loc='upper left')   # 设置图例
    plt.xticks(x) # 设置横坐标的标签
    # 在次坐标轴上绘制折线图
    plt.twinx()
    plt.plot(x, y3, ls='-', lw=3, color='r', marker='o', label='同比增长率')    # ls:线的类型,lw:宽度,o:在顶点处实心圈
    plt.ylim(-0, 1.35)    # 设置次坐标轴的取值范围,避免折线图波动过大
    plt.legend()# 设置图例
    def to_percent(number, position=0):    # 定义显示百分号的函数
        return '%.f' % (number * 100) + '%'
    from matplotlib.ticker import FuncFormatter    # 次坐标轴的标签显示百分号 FuncFormatter:自定义格式函数包
    plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))
    plt.title(i, fontsize=36, loc='center', color='k')# 设置标题
    plt.show()
    plt.savefig(i+".png",dpi=400,bbox_inches="tight")
    plt.clf()






  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 4月29日
      • 已采纳回答 4月21日
      • 修改了问题 4月20日
      • 创建了问题 4月20日

      悬赏问题

      • ¥30 51单片机测量脉冲周期/频率并加以计算、显示
      • ¥50 图书期刊管理系统c++
      • ¥20 c语言基础,设计带界面的小应用
      • ¥15 Erplab无法创建事件清单
      • ¥15 fdisk输入n后不提示选择分区类型
      • ¥15 关于#java#snaker 工作流的问题,如何解决?
      • ¥15 C语言,这个程序该怎么写,急
      • ¥15 新下载的 Linux虚拟机 红帽8 没有下载中文包,怎么切换中文
      • ¥100 逻辑设计有没有会的啊,价格不够可以私下再聊,学号为201921177002,201921177003,201921177004
      • ¥15 结构体实现学生成绩管理系统,要求在图片,学习遇到问题,thanks!