PYTHON使用Matplotlib去实现各种条形图的绘制


Posted in Python onMarch 22, 2022

1. 条形图的绘制

plt.bar 方法有以下常用参数:

  • x :一个数组或者列表,代表需要绘制的条形图的x轴的坐标点。
  • height :一个数组或者列表,代表需要绘制的条形图y轴的坐标点。
  • width :每一个条形图的宽度,默认是0.8的宽度。
  • bottom : y 轴的基线,默认是0,也就是距离底部为0.
  • align :对齐方式,默认是 center ,也就是跟指定的 x 坐标居中对齐,还有为 edge ,靠
  • 边对齐,具体靠右边还是靠左边,看 width 的正负。
  •  color :条形图的颜色。

返回值为 BarContainer ,是一个存储了条形图的容器,而条形图实际上的类型
是 matplotlib.patches.Rectangle 对象。
更多参考

比如现在有 2019 年贺岁片票房的数据(数据来源

#票房单位亿元
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
}
x = list(movies.keys())
y = list(movies.values())
plt.figure(figsize=(15,5))
# plt.bar(x,y,width=-0.3,align="edge",color='r',edgecolor='k')
movie_df = pd.DataFrame(data={"names":list(movies.keys()),"tickets":list(movies.values())})
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)
plt.grid()

PYTHON使用Matplotlib去实现各种条形图的绘制

其中 xticks yticks 的用法跟之前的折线图一样。这里新出现的方法是 bar , bar 常用的有3个参数,分别是 x (x轴的坐标点), y (y轴的坐标点)以及 width (条形的宽度)。

2. 横向条形图

横向条形图需要使用plt.barh 这个方法跟 bar 非常的类似,只不过把方向进行旋转。参数
跟 bar 类似,但也有区别。

如下:

  • y :数组或列表,代表需要绘制的条形图在 y 轴上的坐标点。
  • width :数组或列表,代表需要绘制的条形图在 x 轴上的值(也就是长度)。
  • height :条形图的高度,默认是0.8。
  • left :条形图的基线,也就是距离y轴的距离。

其他参数跟 bar 一样。
返回值也是 BarContainer 容器对象。

还是以以上数据为例,将电影名和票房反转一下。

示例代码如下:

plt.barh(list(movies.keys()),list(movies.values()))
plt.yticks(fontproperties=font,size=12)

PYTHON使用Matplotlib去实现各种条形图的绘制

3. 分组条形图

现在有一组数据,是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()

PYTHON使用Matplotlib去实现各种条形图的绘制

4. 堆叠条形图

堆叠条形图,是将一组相关的条形图堆叠在一起进行比较的条形图。

比如以下案例:

menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
groupNames = ('G1','G2','G3','G4','G5')
plt.bar(groupNames,menMeans,label="男性得分")
plt.bar(groupNames,womenMeans,bottom=menMeans,label='女性得分')
plt.legend(prop=font)

PYTHON使用Matplotlib去实现各种条形图的绘制

在绘制女性得分的条形图的时候,因为要堆叠在男性得分的条形图上,所以使用到了一
bottom 参数,就是距离 x 轴的距离。通过对贴条形图,我们就可以清楚的知道,哪一个队伍的综合排名是最高的,并且在每个队伍中男女的得分情况。

5. 条形图应用场景

  • 数量统计。
  • 频率统计。
  • 适用于分类数据对比。
  • 垂直条形图最多不超过12个分类(也就是12个柱形),横向条形图最多不超过30个分类。如果垂直条形图的分类名太长,那么建议换成横向条形图。
  • 柱状图不适合表示趋势,如果想要表示趋势,应该使用折线图。

到此这篇关于Matplotlib实现各种条形图绘制的文章就介绍到这了,更多相关Matplotlib条形图绘制内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
利用aardio给python编写图形界面
Aug 21 Python
python 定时修改数据库的示例代码
Apr 08 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
Flask框架Flask-Principal基本用法实例分析
Jul 23 Python
python操作excel的方法
Aug 16 Python
解决python3运行selenium下HTMLTestRunner报错的问题
Dec 27 Python
对Django url的几种使用方式详解
Aug 06 Python
python爬虫爬取笔趣网小说网站过程图解
Nov 18 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
baselines示例程序train_cartpole.py的ImportError
May 20 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 Python
Python+OpenCV实现在图像上绘制矩形
Matplotlib绘制条形图的方法你知道吗
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 #Python
python的netCDF4批量处理NC格式文件的操作方法
Python&Matlab实现灰狼优化算法的示例代码
Python学习之时间包使用教程详解
Mar 21 #Python
Python数据结构之队列详解
You might like
PHP开发文件系统实例讲解
2006/10/09 PHP
IStream与TStream之间的相互转换
2008/08/01 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
javascript中this指向详解
2016/04/23 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
python自动12306抢票软件实现代码
2018/02/24 Python
pandas去除重复列的实现方法
2019/01/29 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
java程序员面试交流
2012/11/29 面试题
查环查孕证明
2014/01/10 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
宣传委员竞选稿
2015/11/19 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python
详解Java实现数据结构之并查集
2021/06/23 Java/Android
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android