Python数据分析入门(十七):绘制条形图
条形图的绘制方式跟折线图非常的类似,只不过是换成了plt.bar
方法。plt.bar
方法有以下常用参数:
x
:一个数组或者列表,代表需要绘制的条形图的x轴的坐标点。height
:一个数组或者列表,代表需要绘制的条形图y轴的坐标点。width
:每一个条形图的宽度,默认是0.8的宽度。bottom
:y
轴的基线,默认是0,也就是距离底部为0.align
:对齐方式,默认是center
,也就是跟指定的x
坐标居中对齐,还有为edge
,靠边对齐,具体靠右边还是靠左边,看width
的正负。color
:条形图的颜色。
返回值为BarContainer
,是一个存储了条形图的容器,而条形图实际上的类型是matplotlib.patches.Rectangle
对象。
更多参考:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html#matplotlib.pyplot.bar
条形图的绘制:
比如现在有2019
年贺岁片票房的数据(数据来源:https://piaofang.maoyan.com/dashboard)
#票房单位亿元 movies = { "流浪地球":40.78, "飞驰人生":15.77, "疯狂的外星人":20.83, "新喜剧之王":6.10, "廉政风云":1.10, "神探蒲松龄":1.49, "小猪佩奇过大年":1.22, "熊出没·原始时代":6.71 }
用条形图绘制每部电影及其票房的代码如下:
movies = { "流浪地球":40.78, "飞驰人生":15.77, "疯狂的外星人":20.83, "新喜剧之王":6.10, "廉政风云":1.10, "神探蒲松龄":1.49, "小猪佩奇过大年":1.22, "熊出没·原始时代":6.71 } plt.bar(np.arange(len(movies)),list(movies.keys())) plt.xticks(np.arange(len(movies)),list(movies.keys()),fontproperties=font) plt.grid()
效果图如下:

其中xticks
和yticks
的用法跟之前的折线图一样。这里新出现的方法是bar
,bar
常用的有3个参数,分别是x
(x轴的坐标点),y
(y轴的坐标点)以及width
(条形的宽度)。
横向条形图:
横向条形图需要使用plt.barh
这个方法跟bar
非常的类似,只不过把方向进行旋转。参数跟bar
类似,但也有区别。如下:
y
:数组或列表,代表需要绘制的条形图在y
轴上的坐标点。width
:数组或列表,代表需要绘制的条形图在x
轴上的值(也就是长度)。height
:条形图的高度,默认是0.8。left
:条形图的基线,也就是距离y轴的距离。- 其他参数跟
bar
一样。
返回值也是BarContainer
容器对象。
还是以以上数据为例,将电影名和票房反转一下。示例代码如下:
movies = { "流浪地球":40.78, "飞驰人生":15.77, "疯狂的外星人":20.83, "新喜剧之王":6.10, "廉政风云":1.10, "神探蒲松龄":1.49, "小猪佩奇过大年":1.22, "熊出没·原始时代":6.71 } plt.barh(np.arange(len(movies)),list(movies.values())) plt.yticks(np.arange(len(movies)),list(movies.keys()),fontproperties=font) plt.grid()
效果图如下:

分组条形图:
现在有一组数据,是2019年春节贺岁片前五天的电影票房记录。 示例代码如下:
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] } plt.figure(figsize=(20,8)) width = 0.75 bin_width = width/5 movie_pd = pd.DataFrame(movies) ind = np.arange(0,len(movies)) # 第一种方案 # first_day = movie_pd.iloc[0] # plt.bar(ind-bin_width*2,first_day,width=bin_width,label='第一天') # second_day = movie_pd.iloc[1] # plt.bar(ind-bin_width,second_day,width=bin_width,label='第二天') # third_day = movie_pd.iloc[2] # plt.bar(ind,third_day,width=bin_width,label='第三天') # four_day = movie_pd.iloc[3] # plt.bar(ind+bin_width,four_day,width=bin_width,label='第四天') # five_day = movie_pd.iloc[4] # plt.bar(ind+bin_width*2,five_day,width=bin_width,label='第五天') # 第二种方案 for index in movie_pd.index: day_tickets = movie_pd.iloc[index] xs = ind-(bin_width*(2-index)) plt.bar(xs,day_tickets,width=bin_width,label="第%d天"%(index+1)) for ticket,x in zip(day_tickets,xs): plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.1,ticket+0.1)) # 设置图例 plt.legend(prop=font) plt.ylabel("单位:亿",fontproperties=font) plt.title("春节前5天电影票房记录",fontproperties=font) # 设置x轴的坐标 plt.xticks(ind,movie_pd.columns,fontproperties=font) plt.xlim plt.grid(True) plt.show()
示例图如下:

堆叠条形图:
堆叠条形图,是将一组相关的条形图堆叠在一起进行比较的条形图。比如以下案例:
menMeans = (20, 35, 30, 35, 27) womenMeans = (25, 32, 34, 20, 25) groupNames = ('G1','G2','G3','G4','G5') xs = np.arange(len(menMeans)) plt.bar(xs,menMeans) plt.bar(xs,womenMeans,bottom=menMeans) plt.xticks(xs,groupNames) plt.show()
效果图如下:

在绘制女性得分的条形图的时候,因为要堆叠在男性得分的条形图上,所以使用到了一个bottom
参数,就是距离x
轴的距离。通过对贴条形图,我们就可以清楚的知道,哪一个队伍的综合排名是最高的,并且在每个队伍中男女的得分情况。
条形图应用场景:
- 数量统计。
- 频率统计。
标签:
Python数据分析入门
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)