暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python数据可视化--matplotlib绘制条形图

AI小白笔记 2021-11-17
2109

点击蓝字

关注我们


条形图是柱形图的变形,柱形图的柱子是垂直于X轴的,而条形图的柱子是垂直于Y轴的,除此之外,二者并无太大的区别。


条形图使用plt.barh()函数进行绘制,调用的函数名比柱形图的函数名plt.bar()仅仅多了一个h,也就是英文horizontal的首字母,表示水平的意思。


下面的代码显示一个简单的条形图。


import numpy as np 
import matplotlib.pyplot as plt
plt.rcParams['font.family']='KaiTi'
plt.figure(dpi=120)


provinces=['广东','江苏','山东','浙江','河南','四川','福建','湖北','湖南','上海']
gdp=[11.1,10.3,7.3,6.5,5.5,4.9,4.4,4.3,4.2,3.9]


plt.barh(provinces,gdp)
plt.show()



我们从图中清楚地看到,plt.barh()函数的第一个参数设置是Y轴的数据,第二个参数设置的是X轴的数据,刚好与柱形图相反。


条形图有一个参数与柱形图不同的是height,对应的是柱形图的width,即柱子的宽度,由于条形图各柱子是横着的,所以叫高度。其它参数几乎是一致的。


下面对以上图形进行进一步完善。


import numpy as np 
import matplotlib.pyplot as plt
plt.rcParams['font.family']='KaiTi'
plt.figure(dpi=120)


provinces=['广东','江苏','山东','浙江','河南','四川','福建','湖北','湖南','上海']
gdp=[11.1,10.3,7.3,6.5,5.5,4.9,4.4,4.3,4.2,3.9]


plt.barh(provinces,gdp,height=0.5)
plt.title('2020年各省GDP前十名数据比较图(单位:万亿)')
plt.grid(axis='x',ls='--',alpha=0.4)
plt.xlim(0,12)
for i,j in enumerate(gdp):
   plt.text(j+0.05,i,j,va='center')
plt.show()



以上代码难点在于添加数据,第13行使用了for循环遍历enumerate()函数,变量i获取索引值,变量j获取元素值,在第14行各省GDP值显示在坐标值(j+0.05,i)处,以广东省数据为例,j=11.1,j+0.05=11.15,i=0,所以11.1显示在坐标(11.15,0)处,注意纵标值y=0是在横坐标轴往上+1的地方,因为列表元素索引值是从0开始的。


如果忘记了enumerate()函数的使用方法,请在查看以往的文章。


人们在看条形图时,往往喜欢从上往下看,这时如果能把长的条形放在上面,短的条形放在下面,整个图形可能会更符合人们的习惯,这个效果又怎么做出来呢?


这时只需要在显示条形和显示数据两处代码将列表进行逆序即可,对列表a逆序显示的代码是a[::-1]。


把第9行改为:


plt.barh(provinces[::-1],gdp[::-1],height=0.5)


把第13行改为:


for i,j in enumerate(gdp[::-1]):


就能显示以下图形:



条形图也可以像柱形图那样显示多组条形,这里不再赘述,有兴趣的同学对照多组柱形图的代码尝试自己改改。


一般情况下,如果要显示的内容比较多,建议使用条形图,横着比竖着看起来更加舒适。另外,如果标签值比较长,也最好使用条形图,比如要显示“广西壮族自治区”,如果用柱形图,这个标签长度可能会占用下一个X轴刻度的位置,使用条形图就不会有这个问题。


THE END


文章转载自AI小白笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论