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使用PyV8执行javascript代码示例分享
Dec 04 Python
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
手把手教你用python抢票回家过年(代码简单)
Jan 21 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
Python使用selenium + headless chrome获取网页内容的方法示例
Oct 16 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
Python 爬虫的原理
Jul 30 Python
Python获取百度热搜的完整代码
Apr 07 Python
Python+OpenCV实现在图像上绘制矩形
Matplotlib绘制条形图的方法你知道吗
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 #Python
python的netCDF4批量处理NC格式文件的操作方法
Python&Matlab实现灰狼优化算法的示例代码
Python学习之时间包使用教程详解
Mar 21 #Python
Python数据结构之队列详解
You might like
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
常用js脚本
2006/12/03 Javascript
Javascript 获取LI里的内容
2008/12/17 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python采集博客中上传的QQ截图文件
2014/07/18 Python
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
Python实现遍历数据库并获取key的值
2015/05/17 Python
python取代netcat过程分析
2018/02/10 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
Jdbc数据访问技术面试题
2012/03/30 面试题
机械设计制造专业个人求职信
2013/09/25 职场文书
自我评价范文分享
2014/01/04 职场文书
公关活动策划方案
2014/05/25 职场文书
高三英语教学计划
2015/01/23 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang