当前位置:网站首页>4-3 Matplotlib库 条形图
4-3 Matplotlib库 条形图
2022-08-09 00:29:00 【刚入门的小仙女】
Matplotlib是一个Python的2D绘图库,通过Matplotlib,开发者可以仅需要几行代码,便可以生成折线图,直方图,条形图,饼状图,散点图等。详情可查看Matplotlib库API文档
1. 条形图的绘制
条形图的绘制方式与折线图非常相似,只不过是换成了 plt.bar 方法。plt.bar 方法有以下常用参数:
(1) x :一个数组或列表,代表需要绘制的条形图的 x 轴的坐标点
(2) data:如果传递了data,那么 x 和 y 就可以为 data 中的 key。比如 data 是一个 DataFrame 对象,那么x和 y 就是这个 DataFrame 对象的某个列的名字
(3) width:每一个条形图的宽度,默认是0.8的宽度
(4) bottom:y 轴的基线,默认是0,也就是距离底部为0
(5) align:对齐方式,默认是 center ,也就是跟指定的 x 坐标居中对齐,还有为 edge (靠边对齐),具体靠右边还是靠左边,看 width 的正负
(6) color:条形图的颜色
返回值为 BarContainer ,是一个存储了条形图的容器,而条形图实际上的类型是 matplotlib.patches.Rectangle 对象
2. 竖向条形图
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#加载字体所用的包
from matplotlib import font_manager
font = font_manager.FontProperties(fname="C:\Windows\Fonts\simhei.ttf",size=20)
#电影票房
movies = {
"流浪地球":40.78,
"飞驰人生":15.77,
"疯狂的外星人":20.83,
"新喜剧之王":6.10,
"廉政风云":1.10,
"神探蒲松龄":1.49,
"小猪佩奇过大年":1.22,
"熊出没·原始时代":6.71
}
x = list(movies.keys())
y = list(movies.values())
plt.figure(figsize=(15,5))
#方式一:指定x和y
plt.bar(x,y,width=0.5,align='edge',color='r',edgecolor='k')
movie_df = pd.DataFrame(data={
"names":list(movies.keys()),"tickets":list(movies.values())})
#方式二:指定data
plt.bar("names","tickets",data=movie_df)
plt.xticks(fontproperties=font,size=12)
plt.yticks(range(0,45,5),["%d亿"%x for x in range(0,45,5)],fontproperties=font,size=12)
3. 横向条形图
横向条形图需要使用 plt.barh 这个方法和 bar 非常的类似,只不过把方向进行旋转。参数跟 bar 类似,但也有区别。如下:
(1) y :数组或列表,代表需要绘制的条形图在 y 轴上的坐标点
(2) width:数组或列表,代表需要绘制的条形图在 x 轴上的值(也就是长度)
(3) height:条形图的高度,默认是0.8
(4) left:条形图的基线,也就是距离 y 轴的距离
返回值也是 BarContainer 容器对象。
movies = {
"流浪地球":40.78,
"飞驰人生":15.77,
"疯狂的外星人":20.83,
"新喜剧之王":6.10,
"廉政风云":1.10,
"神探蒲松龄":1.49,
"小猪佩奇过大年":1.22,
"熊出没·原始时代":6.71
}
plt.barh(list(movies.keys()),list(movies.values()))
plt.yticks(fontproperties=font,size=10)
4.分组条形图
#绘制的规则是:一次性绘制所有电影第一天的数据,第二天的数据2...,然后要找到规律,把这个条形图的位置算好
#准备数据
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]
}
#结果为:
# 流浪地球 飞驰人生 疯狂的外星人 新喜剧之王 廉政风云 神探蒲松龄 小猪佩奇过大年 熊出没·原始时代
#0 2.01 3.19 4.07 2.72 0.56 0.66 0.58 1.13
#1 4.59 5.08 6.92 3.79 0.74 0.95 0.81 1.96
#2 7.99 6.73 9.30 4.45 0.83 1.10 0.94 2.73
#3 11.83 8.10 11.29 4.83 0.88 1.17 1.01 3.42
#4 16.00 9.35 13.03 5.11 0.92 1.23 1.07 4.05
movie_df = pd.DataFrame(movies)
plt.figure(figsize=(15,5))
xticks = np.arange(len(movies))
#可以调整间距
#xticks = np.arange(0,len(movies)*1.5,1.5)
bar_width = 0.15
#-2 -1 0 1 2
#plt.bar(xticks-2*bar_width,movie_df.iloc[0],width=bar_width)
#plt.bar(xticks-bar_width,movie_df.iloc[1],width=bar_width)
#plt.bar(xticks,movie_df.iloc[2],width=bar_width)
#plt.bar(xticks+bar_width,movie_df.iloc[3],width=bar_width)
#plt.bar(xticks+2*bar_width,movie_df.iloc[4],width=bar_width)
for index in movie_df.index:
day_tickets = movie_df.iloc[index]
xs = xticks+(-2+index)*bar_width
#label为图例设置文本
plt.bar(xs,day_tickets,width=bar_width,label='第%d天票房'%(index+1))
#zip接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)
for ticket,x in zip(movie_df.iloc[index],xs):
#设置注释文本
plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.1,ticket+0.1))
#设置x轴刻度
plt.xticks(xticks,movie_df.columns,fontproperties=font,size=15)
#图例
font.set_size(12)
plt.legend(prop=font)
#网格
plt.grid()
plt.show()
5. 堆叠条形图
堆叠条形图,是将一组相关的条形图堆叠在一起进行比较的条形图。在绘制堆叠的数据时,利用 bottom 参数往上偏移指定的距离。
#准备数据
menMeans = (20,35,30,35,27)
womenMeans = (25,32,34,20,25)
groupNames = ('G1','G2','G3','G4','G5')
#设置图形大小
plt.figure(figsize=(8,5))
plt.bar(groupNames,menMeans,label='男性得分',width=0.6)
plt.bar(groupNames,womenMeans,bottom=menMeans,label='女性得分',width=0.6)
for name,men,women in zip(groupNames,menMeans,womenMeans):
plt.annotate(men,xy=(name,men),xytext=(name,men+0.1))
plt.annotate(women,xy=(name,women),xytext=(name,men+women+0.1))
plt.legend(prop=font)
边栏推荐
- Non-major graduates, five-faced Ali: Four rounds of technical + HR have already taken an offer
- XOR Inverse
- PhongAndBelinnPhong光照模型
- 千分位数字
- <力扣刷题>965. 单值二叉树
- A double non-programmer interviewed Ant, Meituan, Ctrip and other big companies with offers to share the interview process
- 在vscode中编辑、编译、下载Keil工程
- 一名双非程序媛面试蚂蚁、美团、携程等大厂拿 offer 分享面试过程
- JSON基础,传递JSON数据,介绍jackson、gson、fastjson、json-lib四种主流框架!
- 插值拟合——数据处理或预测
猜你喜欢
Discourse 的关闭主题(Close Topic )和重新开放主题
Phoenix的安装配置以及数据处理(详细步骤)
灰色预测模型
轻量级学习网络--ShuffleNet v1:Group conv的改进与channel shuffle的提出
#468. 函数求和
GaN图腾柱无桥 Boost PFC(单相)三(预测模型)
插值拟合——数据处理或预测
[Deep Learning] TensorFlow Learning Road 2: Introduction to ANN and TensorFlow Implementation
整流八--电网不平衡状态下三相PWM整流器的控制策略
Sencha Touch页面跳转创建返回上一级按钮的设计思路
随机推荐
小G砍树 (换根dp)
JD.com was abused on three sides. Regarding redis, high concurrency, and distributed, I am confused.
逐片元-兰伯特光照模型
轻量化网络ChannelNet--channel-wize Conv在channel维度卷积
v-model 简单理解
GaN图腾柱无桥 Boost PFC(单相)三(预测模型)
笔记&代码 | 统计学——基于R(第四版) 第十章 多元线性回归
非科班毕业生,五面阿里:四轮技术面 +HR 一面已拿 offer
经典卷积神经网络ZFNet--解卷积可视化
理财产品募集期和开放期有什么区别?
Use jdbc to handle MySQL's utf8mb4 character set (transfer)
如何选择云服务器与轻量应用服务器?谈谈自己的看法
A double non-programmer interviewed Ant, Meituan, Ctrip and other big companies with offers to share the interview process
STM32H750VBT6 Keil5 error :flash download failed cortex-M7
pycharm开启鼠标滚动调节字体大小
5-3 Seaborn 分布绘图
Unity3D小白学习日记(03):Unity3D 常用技巧整理(大量干货!)
桌面内容整理,用时高效
"Replay" interview BAMT came back to sort out 398 high-frequency interview questions to help you get a high salary offer
笔记&代码 | 统计学——基于R(第四版) 第二章数据可视化