Matplotlib绘制条形图的方法有哪些
发表于:2025-11-21 作者:千家信息网编辑
千家信息网最后更新 2025年11月21日,这篇文章主要介绍了Matplotlib绘制条形图的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Matplotlib绘制条形图的方法有哪些文章都会有所收获,下面
千家信息网最后更新 2025年11月21日Matplotlib绘制条形图的方法有哪些
这篇文章主要介绍了Matplotlib绘制条形图的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Matplotlib绘制条形图的方法有哪些文章都会有所收获,下面我们一起来看看吧。
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom matplotlib import font_manager
一、一般条形图
一般条形图使用 pyplot.bar()函数绘制,其形式及参数如下:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
主要参数解释:# x:一个数组或者列表,代表需要绘制的条形图的x轴的坐标点。# height:一个数组或者列表,代表需要绘制的条形图y轴的坐标点。# width:每一个条形图的宽度,默认是0.8的宽度。# bottom:y轴的基线,默认是0,也就是距离底部为0.# align:对齐方式,{'center','edge'},默认是center,居中对齐;edge为靠边对齐,具体靠右边还是靠左边,看width的正负。# color:条形图的颜色。# edgecolor : 条形图边框的颜色。# linewidth : 条形图边框的宽度。如果为 0,则不绘制边框示例:
某天电影票房数据:
movies = { "流浪地球":40.78, "飞驰人生":15.77, "疯狂的外星人":20.83, "新喜剧之王":6.10, "廉政风云":1.10, "神探蒲松龄":1.49, "小猪佩奇过大年":1.22, "熊出没·原始时代":6.71}直接通过获取字典的键值作为x,y轴数据
#票房单位亿元movies = { "流浪地球":40.78, "飞驰人生":15.77, "疯狂的外星人":20.83, "新喜剧之王":6.10, "廉政风云":1.10, "神探蒲松龄":1.49, "小猪佩奇过大年":1.22, "熊出没·原始时代":6.71}# 中文显示问题plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['font.size'] = 13# 设置图大小plt.figure(figsize=(15,8))x = list(movies.keys()) # 获取x轴数据(字典的键)y = list(movies.values()) # 获取y轴数据(字典的值)plt.bar(x,y,width=0.5,bottom=0,align='edge',color='g',edgecolor ='r',linewidth=2)# 绘制标题plt.title("电影票房数据",size=26)# 设置轴标签plt.xlabel("电影名",size=28)plt.ylabel("票房/亿",size=28)plt.show()也可以利用字典创建DataFrame索引,通过data参数传入
#票房单位亿元movies = { "流浪地球":40.78, "飞驰人生":15.77, "疯狂的外星人":20.83, "新喜剧之王":6.10, "廉政风云":1.10, "神探蒲松龄":1.49, "小猪佩奇过大年":1.22, "熊出没·原始时代":6.71}movies_df = pd.DataFrame(data={"name":list(movies.keys()),"tickes":list(movies.values())}) #通过字典创建DataFrame索引font = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=12) # 使用font_manager模块设置中文# 设置图的大小,传入x,yplt.figure(figsize=(14,5))# 使用plt.bar()绘制条形图plt.bar("name","tickes",data=movies_df,width=0.5,bottom=0,align='edge',color='g',edgecolor ='r',linewidth=2)#设置X轴刻度,设置字体,也可以设置字体大小sizeplt.xticks(fontproperties=font)# 设置标题plt.title("电影票房数据",size=30)#设置X,Y轴名字plt.ylabel('票房',fontproperties=font,size=25)plt.xlabel('影片名字',fontproperties=font,size=25)#设置Y刻度plt.yticks(range(0,50,5),["%d"%x for x in range(0,50,5)],fontproperties=font1,size=20)# 只保留图形信息plt.show()二、横向条形图
横向条形图需要使用barh()这个跟bar非常的类似,只不过把方向进行旋转。参数也和pyplot.bar()类似
matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
# 主要参数解释:# y:数组或列表,代表需要绘制的条形图在y轴上的坐标点。# width:数组或列表,代表需要绘制的条形图在x轴上的值(也就是长度)。# height:条形图的高度(宽度),默认是0.8。# left:条形图的基线,也就是距离y轴的距离。默认为0
示例:
plt.barh()
movies = { "流浪地球":40.78, "飞驰人生":15.77, "疯狂的外星人":20.83, "新喜剧之王":6.10, "廉政风云":1.10, "神探蒲松龄":1.49, "小猪佩奇过大年":1.22, "熊出没·原始时代":6.71}font2 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')x1 = list(movies.keys())y1 = list(movies.values())# 设置图的大小plt.figure(figsize=(10,5))# 使用plt.barh()plt.barh(x1,y1,height=0.7,left=0,color='c',edgecolor='r')#设置Y轴刻度,设置字体,也可以设置字体大小sizeplt.yticks(fontproperties=font2,size=20)plt.xlabel("票房/亿",size=20)# 设置标题plt.title("电影票房数据",size=30)# 只保留图形信息plt.show()Axes.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
另外,还可通过返回的axes对象绘制图形
movies = { "流浪地球":40.78, "飞驰人生":15.77, "疯狂的外星人":20.83, "新喜剧之王":6.10, "廉政风云":1.10, "神探蒲松龄":1.49, "小猪佩奇过大年":1.22, "熊出没·原始时代":6.71}font2 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')mdf = pd.DataFrame(data={"name":list(movies.keys()),"tickes":list(movies.values())})fig,axes = plt.subplots() # 通过返回的axes对象绘制图形axes.barh("name","tickes",data = mdf,height=0.6,left=0,color='c',edgecolor='r')#设置Y轴刻度,设置字体,也可以设置字体大小sizeplt.yticks(fontproperties=font2,size=20)plt.xlabel("票房/亿",size=24)# 设置标题plt.title("电影票房数据",size=27)# 只保留图形信息plt.show()
三、分组条形图的绘制
五天的电影票房数据(假设日期为1.1-1.5):并转换为DataFrame索引
movies = { "流浪地球":[2.01,4.59,7.99,11.83,16], "飞驰人生":[3.19,5.08,6.73,8.10,9.35], "疯狂的外星人":[4.07,6.92,9.30,11.29,13.03], "新喜剧之王":[2.72,3.79,4.45,4.83,5.11], "廉政风云":[0.56,0.74,0.83,0.88,0.92], "神探蒲松龄":[0.66,0.95,1.10,1.17,1.23], "小猪佩奇过大年":[0.58,0.81,0.94,1.01,1.07], "熊出没·原始时代":[1.13,1.96,2.73,3.42,4.05]}mdf = pd.DataFrame(movies) mdf
绘制分组条形图思路:先选出每天所有电影的票房数据,可使用DataFrame.iloc[]方法获取,例如
# 获取第一天票房数据mdf.iloc[0]
流浪地球 2.01飞驰人生 3.19疯狂的外星人 4.07新喜剧之王 2.72廉政风云 0.56神探蒲松龄 0.66小猪佩奇过大年 0.58熊出没·原始时代 1.13Name: 0, dtype: float64
然后按天进行绘制,这里需要确定一个中心点作为中间日期的条形图位置(这里为第三天),有多少部电影就需要多少个中心点,可使用np.arange(len(movies))获取x轴刻度作为中心点。最后根据日期按条形图的宽度调整条形图位置即可。
plt.figure(figsize=(15,5))# 设置X轴刻度为一个数组(有广播功能)xticks = np.arange(len(movies)) #设置字体font = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')# 设置条形图宽度bar_width = 0.15#设置第一天所有影片条形图的位置plt.bar(xticks-2*bar_width,mdf.iloc[0],width=bar_width,color='pink') # iloc[]取DataFrame的一行#设置第二天所有影片条形图的位置 plt.bar(xticks-bar_width,mdf.iloc[1],width=bar_width)#设置第三天所有影片条形图的位置,默认在[0 1 2 3 4 5 6 7]center处plt.bar(xticks,mdf.iloc[2],width=bar_width)#设置第四天所有影片条形图的位置plt.bar(xticks+bar_width,mdf.iloc[3],width=bar_width)#设置第五天所有影片条形图的位置plt.bar(xticks+2*bar_width,mdf.iloc[4],width=bar_width)# 设置X轴信息plt.xticks(xticks,mdf.columns,fontproperties=font,size=15)#设置Y刻度plt.yticks(range(0,20,2),["%d"%x for x in range(0,20,2)],fontproperties=font,size=16)#设置X,Y轴名字plt.ylabel('票房/亿',fontproperties=font,size=30)plt.xlabel('影片名字',fontproperties=font,size=30)# 设置标题plt.title("五日票房数据",fontproperties=font,size=30)# 只保留图形信息plt.show()使用循环绘制每日数据
plt.figure(figsize=(16,5))# 设置X轴刻度为一个数组(有广播功能)#xticks1 = np.arange(len(movies)) # 这样设置每部电影X轴的距离是1,如果5个条形图宽度之后大于1会和其他电影重叠,可以设置步长xticks1 = np.arange(0,7*len(movies),7) # 改变步长,要在设置X轴信息处改变xticks(步长*ticks labels)的第一个参数,否则对应不上#设置字体font4 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')# 设置条形图宽度bar_width2 = 1.05#使用循环画出前五天的条形图for index in mdf.index: # plt.bar(xticks1+(-2+index)*bar_width2,mdf.iloc[index],width=bar_width2,label='第%d天票房'%(index+1)) xs = xticks1+(-2+index)*bar_width2 # 在X轴的位置 day_tickets = mdf.iloc[index] plt.bar(xs,day_tickets,width=bar_width*7,label="第%d天票房"%(index+1)) #设置注释文本 # zip(day_tickets,xs)打包为元素为元组的列表,元素个数与最短的列表一致 for ticket,x in zip(day_tickets,xs): # ticket是day_tickets列表的值,x是xs的值 plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.2,ticket+0.1))# 设置X轴信息plt.xticks(7*xticks,mdf.columns,fontproperties=font4,size=15)#设置X,Y轴名字plt.ylabel('票房/亿',fontproperties=font4,size=25)plt.xlabel('影片名字',fontproperties=font4,size=25)# 设置标题plt.title("五日票房数据",fontproperties=font4,size=30)# 设置图例font4.set_size(15) # 图例无size属性,可以在字体设置font4中改大小(或者font.set_size():只改图例plt.legend(prop=font4) # 根据bar()函数的中的label标签进行设置,不可缺少# 设置网格plt.grid()# 只保留图形信息plt.show()四、堆叠条形图绘制
堆叠条形图就是在已有数据基础位置上进行绘制图形,使用bottom参数,以已有数据作为新数据的基地进行新数据的绘制,可以达到调整条形图的位置的目的。
示例:
# 男女不同组别的等分情况menMeans = (20, 35, 30, 35, 27)womenMeans = (25, 32, 34, 20, 25)groupNames = ('G1','G2','G3','G4','G5')xs = np.arange(len(menMeans)) # 有多少个组font5 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=16)plt.figure(figsize=(15,7))# 绘制男性得分plt.bar(xs,menMeans,label='男性得分',width=0.4)# 绘制女性得分,以男性得分的最大值为基底plt.bar(xs,womenMeans,bottom=menMeans,label='女性得分',width=0.4)#设置图例plt.legend(prop=font5) # 根据bar()函数的中的label标签进行设置# 设置X轴刻度名称plt.xticks(xs,groupNames)# 设置标签plt.xlabel("组别",fontproperties=font5,size=23)plt.ylabel("得分",fontproperties=font5,size=23)# 设置标题plt.title("男女不同组别得分",fontproperties=font5,size=28)# 只保留图形plt.show()关于"Matplotlib绘制条形图的方法有哪些"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Matplotlib绘制条形图的方法有哪些"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
条形
票房
数据
电影
位置
刻度
图形
字体
信息
宽度
影片
原始
疯狂
人生
参数
喜剧
喜剧之王
地球
外星
外星人
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器电源改台式机用
服务器管理卡是什么东西
航空软件开发需求
信息网络安全监察专业干什么
服务器打开任务管理器
手机的服务器地址在哪里
嘉定区技术软件开发信息推荐
电脑看电视软件开发
sql数据库准备
街道网络安全制度规范及工作责任
海淀网络安全保卫
sun服务器认不到硬盘
美容仪器硬软件开发定制
济南地区正规的浪潮服务器代理商
bzz能做分布式数据库吗
软件开发的瀑布模型和原型模型
数据库服务器对cpu的要求
三门峡乐尚软件开发有限
东莞市盛夏网络技术
互联网算科技类吗
网络安全协议总汇
宜宾网络安全法竞赛
北京自动化软件开发配置
服务器修改密码需要重启不
正规网络安全方案设计收费
电商售后数据库
赣县租房软件开发
天津搜狗网络技术有限公司
校园一卡通软件开发流程图
广月朝辉互联网科技有限公司