Matplotlib绘制条形图的方法有哪些
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要介绍了Matplotlib绘制条形图的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Matplotlib绘制条形图的方法有哪些文章都会有所收获,下面
千家信息网最后更新 2025年01月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安全错误
数据库的锁怎样保障安全
set 数据库
达人游网络技术有限公司
学习软件开发开发的学校
数据库应用期末考试试题
符昊网络安全
济南网络安全培训小白入门
宝塔面板怎么做数据库
服务器的iis配置
东莞鹏远网络技术客服电话
acs串口管理服务器
服务器怎么设置流量大
计算机网络技术与实训的软件
星际公民如何标记服务器
网络安全防御技术又叫什么
南通七和互联网科技
体育局网络安全自查情况汇报
服务器工作流管理软件
数据库更新怎样刷新数据
打印机显示服务器驱动不正确
学生录入与数据库连接
通信设备软件开发是做什么的
鞍山兴天软件开发有限公司
数据库应用期末考试试题
数据库技术与应用csdn
公司招聘测试题软件开发
数据库图片查看
员工管理数据库需要什么表
杭州尚悠品网络技术
软件开发教程考试
上海邀玩网络技术公司