matplotlib柱状图(条形图) 作者:马育民 • 2019-08-02 09:40 • 阅读:10673 # 概述 柱状图的高度表示各类别的数值多少,宽度是固定的 官方文档: https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html?highlight=bar#matplotlib.pyplot.bar [![](https://www.malaoshi.top/upload/0/0/1EF4E8DOolgE.png)](https://www.malaoshi.top/upload/0/0/1EF4E8DOolgE.png) 当数据量过多,宽度不够,文字过长是,使用下面这种横向柱状图 [![](https://www.malaoshi.top/upload/0/0/1EF4E8EjTeLK.png)](https://www.malaoshi.top/upload/0/0/1EF4E8EjTeLK.png) ### 语法 ``` matplotlib.pyplot.bar(x, height, width=0.8) ``` ##### 参数说明 - x:x轴数值 - height:y轴数值 - width:宽度,默认0.8 ### 例子 [![](https://www.malaoshi.top/upload/0/0/1EF4E8DOolgE.png)](https://www.malaoshi.top/upload/0/0/1EF4E8DOolgE.png) ``` import matplotlib.pyplot as plt import matplotlib.font_manager as fm # 设置字体 my_font=fm.FontProperties(fname=r'C:\Windows\Fonts\msyh.ttc') apps=['社交','视频','新闻阅读','实用工具','音乐','游戏','金融','浏览器'] datas=[96.2,70.2,60.3,59.0,51.9,42.1,39.3,38.6] plt.figure(figsize=(10,4),dpi=100) plt.bar(apps,datas,width=0.3) # 设置x轴刻度,让刻度显示app名字 plt.xticks(range(len(apps)),apps,fontproperties=my_font,rotation=45) plt.show() ``` ### 例子pandas读取电影票房 ``` import pandas as pd import matplotlib.pyplot as plt df=pd.read_csv(r'C:\Users\mym\Desktop\数据集\IMDB-Movie-Data.csv' ) plt.figure(figsize=(20,30),dpi=100) df100=df.loc[0:100] r=range(len(df100['Title'])) plt.barh(r,df100['Revenue (Millions)'],height=0.3) plt.yticks(r,df100['Title']) plt.show() ``` # 横向柱状图 官方文档: https://matplotlib.org/api/_as_gen/matplotlib.pyplot.barh.html?highlight=barh#matplotlib.pyplot.barh ### 语法 ``` matplotlib.pyplot.barh(y, width, height=0.8,**kwargs) ``` ##### 参数 - y:y轴数值 - width:x轴数值 - height:高度,默认0.8 - \*\*kwargs:关键字参数 - color :设置颜色 ### 例子 当数据过多,x轴名字过长时,就需要用横向柱状图显示 [![](https://www.malaoshi.top/upload/0/0/1EF4E8EjTeLK.png)](https://www.malaoshi.top/upload/0/0/1EF4E8EjTeLK.png) ``` import matplotlib.pyplot as plt import matplotlib.font_manager as fm # 设置字体 my_font=fm.FontProperties(fname=r'C:\Windows\Fonts\msyh.ttc') apps=['社交','视频','新闻阅读','实用工具','音乐','游戏','金融','浏览器'] datas=[96.2,70.2,60.3,59.0,51.9,42.1,39.3,38.6] # y轴,0在下面,最大值在上面,为了让社交显示在上面,要倒序 y_datas=range(len(apps),0,-1) plt.figure(figsize=(10,4),dpi=100) plt.barh(y_datas,datas,height=0.5) plt.yticks(y_datas,apps,fontproperties=my_font) # plt.savefig('./条形图4.png') plt.show() ``` ### 例子:多个柱状图 见下面柱状图,是网民职业职业结构对比图,将两年的数据都显示出来,进行 **对比** [![](https://www.malaoshi.top/upload/0/0/1EF4E8FebxMN.png)](https://www.malaoshi.top/upload/0/0/1EF4E8FebxMN.png) ``` import matplotlib.pyplot as plt import matplotlib.font_manager as fm # 设置字体 my_font=fm.FontProperties(fname=r'C:\Windows\Fonts\msyh.ttc') apps=['学生','企业/公司高层管理人员','企业/公司中层管理人员','企业/公司一般职业','专业技术人员','商业服务业职工','制造生产型企业工人','个体户/自由职业者'] datas_2016=[25,0.5,2.3,11.9,4.8,4.4,4.5,22.7] datas_2017=[25.4,0.5,1.9,12.2,4.8,4.3,3.5,21.3] #柱的高度 bar_height=0.3 # 间距 spacing=1 # y轴,0在下面,最大值在上面,为了让社交显示在上面,要倒序 l=list(item*spacing for item in range(len(apps)))[::-1] l2=[item+bar_height for item in l] l3=[item+bar_height/2+0.05 for item in l] print(l) print(l2) print(l3) plt.figure(figsize=(10,8),dpi=100) plt.barh(l2,datas_2016,height=bar_height,label='2016年') plt.barh(l,datas_2017,height=bar_height,label='2017年') plt.xticks(range(0,31),range(0,31),fontproperties=my_font) plt.yticks(l3,apps,fontproperties=my_font) plt.legend(prop=my_font,loc =1) # plt.savefig('./条形图4.png') plt.show() ``` 原文出处:http://malaoshi.top/show_1EF3oB2biGVS.html