点击蓝字
关注我们
条形图是柱形图的变形,柱形图的柱子是垂直于X轴的,而条形图的柱子是垂直于Y轴的,除此之外,二者并无太大的区别。
条形图使用plt.barh()函数进行绘制,调用的函数名比柱形图的函数名plt.bar()仅仅多了一个h,也就是英文horizontal的首字母,表示水平的意思。
下面的代码显示一个简单的条形图。
import numpy as npimport matplotlib.pyplot as pltplt.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 npimport matplotlib.pyplot as pltplt.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




