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 相关文章推荐
python threading模块操作多线程介绍
Apr 08 Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
Python图像处理之颜色的定义与使用分析
Jan 03 Python
python高斯分布概率密度函数的使用详解
Jul 10 Python
详解python中的index函数用法
Aug 06 Python
Python搭建代理IP池实现存储IP的方法
Oct 27 Python
Python利用逻辑回归分类实现模板
Feb 15 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 Python
Python+OpenCV实现在图像上绘制矩形
Matplotlib绘制条形图的方法你知道吗
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 #Python
python的netCDF4批量处理NC格式文件的操作方法
Python&Matlab实现灰狼优化算法的示例代码
Python学习之时间包使用教程详解
Mar 21 #Python
Python数据结构之队列详解
You might like
PHP4之真OO
2006/10/09 PHP
PHP 实用代码收集
2010/01/22 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
Javascript表达式中连续的 && 和 || 之赋值区别
2010/10/17 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
django框架中间件原理与用法详解
2019/12/10 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
怎么写好自荐信
2013/10/30 职场文书
幼儿园课题方案
2014/06/09 职场文书
开除通知书范本
2015/04/25 职场文书