问题遇到的现象和发生背景
这是我的数据
想要画这样的图
根据教程
在我自己敲代码时候发现有一行报错
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年")报错,报错内容为
将该代码更正为
plt.bar(x+str(bar_width), y2, bar_width, label="2021年")
发现图显示为
我希望图是这样的
我想要达到的结果
附全部代码
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()