概述
柱状图的高度表示各类别的数值多少,宽度是固定的
官方文档:
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html?highlight=bar#matplotlib.pyplot.bar
当数据量过多,宽度不够,文字过长是,使用下面这种横向柱状图
语法
matplotlib.pyplot.bar(x, height, width=0.8)
参数说明
- x:x轴数值
- height:y轴数值
- width:宽度,默认0.8
例子
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轴名字过长时,就需要用横向柱状图显示
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()
例子:多个柱状图
见下面柱状图,是网民职业职业结构对比图,将两年的数据都显示出来,进行 对比
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()