python的Pandas模块读取Excel非常方便,可以生成各种图,这不是重点。重点是如何在生成的柱状图上带上值的标识,这个需要费些心思。
这里举一个百分比的例子,比如我有一个表,统计每一年这五个省GDP占全国的比例。
我想要做一个堆叠的柱状图,实现很容易。但是要在图上带上值的标记,很费心思。
import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
df=pd.read_excel('data.xlsx',0)
df=df.set_index('年份') #年份作为横轴
g=df.plot.bar(rot=0,colormap='spring',stacked=True,ylim=[0,0.6]) #colormap为柱的颜色风格,rot设置横坐标不旋转(默认旋转90度) 设置纵轴最高为0.6
#下面实现给柱子都加上值的标识,我们要标记在柱子的中央!
for index,row in df.reset_index().iterrows(): #重置横坐标为数字
height=0
val=0 #标记点的纵坐标
for item in df.columns: #遍历每个省
val+=height/2+row[item]/2 #实现标记在柱子的中央
height=row[item] #值
vals=item+':'+ str(round(row[item]*100,1))+'%' #标记的值设置为百分比
g.text(index,val,vals,horizontalalignment='center') #index为标记点横坐标,val为标记点的纵坐标,vals为标记的值,设置水平居中
plt.show()
然后效果如图:一目了然,看到广东的比重上升,山东的比重下降