提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
如何用python 画带有表格数据的堆叠柱状图
提示:以下是本篇文章正文内容,下面案例可供参考
一、大致思路
0.读取数据并整理与清洗
1.堆叠柱状图,堆叠选用累积for 函数画图
2.表格数据,选用plt.table展示
3.柱状图何表格的位置摆放
二、实现代码
1.数据
2.代码
代码如下(示例):
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dt=pd.read_excel('disaster.xlsx',index_col=0)
data=dt.values[::-1,:]#行倒叙翻转 ,方便y轴从下到上,数值由小变大画图
f=plt.figure(dpi=200)
ax=f.subplots()
columns=dt.columns#列名,五个灾难
rows=dt.index#行名,Index(['100year', '50year', '20year', '10year', '5year'], dtype='object', name='loss by disater')
color=plt.cm.PuBuGn(np.linspace(.2,.9,len(rows)))
index=np.arange(len(columns))+.3 #五个灾难为0到5,再+.3,作为x坐标轴位置,array([0.3, 1.3, 2.3, 3.3, 4.3])
bar_width=.4#0.3+0.4+0.3=1,即柱状图宽度为0.4且在x轴0.3的位置开始画图,让柱状图在中间位置
y_offset=np.zeros(len(columns))#y轴第一个柱状图起始位置都为0,对应五个列名为五个0
cell_text=[]#生成一个用于累加y轴堆叠数值的列表
for i in range(data.shape[0]): #data.shape[0]data第一个对象的数量,代指这里五个灾难
ax.bar(index,data[i],bar_width,color=color[i],bottom=y_offset)#(x轴位置,每个灾难对应的数值,柱宽,柱子颜色,y轴柱状图起始位置)
y_offset=y_offset+data[i]#画堆叠柱状图
cell_text.append(['{:.1f}'.format(x) for x in y_offset])#保存堆叠柱状图对应的y轴数值
cell_text.reverse()#y轴数值翻转,匹配柱状图
colors_reverse=color[::-1,:]#颜色翻转,匹配柱状图
#画表格函数ax.table(表格内容,行标签,列标签,每行对应的颜色,表格放置的位置)
ax.table(cellText=cell_text,rowLabels=rows,colLabels=columns,rowColours=colors_reverse,loc='bottom')
plt.xticks([])
plt.ylabel('loss')
plt.title('loss by disaster')
plt.savefig('带有表格的柱状图.png', bbox_inches='tight')#tight避免出现保存图片不完整情形
plt.show()
3.图片展示
总结
数据读取的方式,堆叠图画法的思路,颜色细节的调整,即可画出一张在excel上能轻松画出带有表格数据的柱状图,哈哈哈哈哈