使用matplotlib中的bar函数绘制柱状图
使用柱状图显示三日电影的票房信息
要显示的数据为2018年12月7日-9日四场电影的票房信息
四场电影分别为:无名之辈,狗十三,毒液:知名守卫者,憨豆特工3
2018年12月7日四场电影票房分别为:[991.94, 375.64, 200.48, 73.27]
2018年12月8日四场电影票房分别为:[1908.22, 547.61, 466.23, 193.8]
2018年12月9日四场电影票房分别为:[1532.87, 525.63, 332.35, 170.57]
本次绘图思路:
1、x轴使用日期作为度量值,y轴使用票房作为度量值;所有要对原始数据进行相应的修改
2、使用plt.figure()函数来调整图片的大小
本文使用说明:plt.figure(figsize=(20, 8), dpi=80);意思是x轴长度为20英尺,y轴长度为8英尺,dpi是用来设置像素的
3、使用plt.bar()函数来绘制柱状图,该函数可以多次调用,有叠加效果
本文使用说明:plt.bar(x_1, y_1, width=bar_width, label="无名之辈", color='#87CEFA');这个函数可以调用的参数有很多,其中x,y值为必备的参数,x,y的长度必须一一对应才能绘制,width设置柱状图的宽度,label设置这个柱状图的标签,要调用plt.legend()函数才能显示出来,color这个参数是设置柱状图的颜色的,可以直接写颜色的名称,但是本人推荐使用颜色代码比较方便,也不会出错。
4、因为matplotlib默认显示不出中文,为了要显示中文,所以要设置自己的字体,设置字体的方式有多种,本文使用的环境为window10,此处设置的方式可以保证对window10环境有效
先导入相应的包:from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/simsun.ttc") # 这里面的C:/Windows/Fonts/simsun.ttc为自己电脑存放字体的路径,这样就可以设置任意自己想要的字体了。
使用字体的方式:在要显示中文的地方,比如:plt.xticks(x_tick, xtick_label, fontproperties=my_font, fontsize=15)中,将fontproperties属性设置为自定义的字体
注意:plt.legend(prop=my_font, loc=5)函数是将prop属性设置为自定义字体,其他的都是fontproperties属性
5、使用plt.xticks()和plt.yticks函数设置x轴和y轴的刻度信息
本文使用说明:plt.xticks(x_tick, xtick_label, fontproperties=my_font, fontsize=15);大家可以ctrl+b查看函数源代码。在本文中,x_tick和xtick_label长度一一对应,x_tick是一个列表,意思是在x_tick[i]的下方写上xtick_label[i0]的信息,也就是把你要刻画在x轴上的信息存储在xtick_label列表上,fontproperties属性设置中文不要乱码用的,fontsize设置文字大小,大家调一下就知道怎么用了。
6、使用plt.ylabel()和plt.xlabel()和plt.title()函数设置图片中的标签信息;
7、使用plt.grid(alpha=0.3)函数可以设置图片背后有网格,alpha设置透明度,alpha的取值为0到1,越小网格透明度越高
8、使用plt.text()函数可以在绘制的图片任何地方添加描述信息,本文使用该函数用来显示每日票房的具体数值。该函数感觉非常非常有用,大家可以去看下该函数的用法
9、使用plt.savefig('T2.png')函数可以把绘制的图片保存下来
10、使用plt.show()直接显示该图片
下面就是源代码了,第一次写博客,自己也是刚学matplotlib,如有错误,请各位指出,共同交流共同进步
1 # coding = utf-8
2 from matplotlib import pyplot as plt
3 from matplotlib import font_manager
4 # 设置自己的字体
5 my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/simsun.ttc")
6
7 # 将数据存储为列表
8 a = ["无名之辈", "狗十三", "毒液:致命守护者", "憨豆特工3"]
9 b_7 = [991.94, 375.64, 200.48, 73.27]
10 b_8 = [1908.22, 547.61, 466.23, 193.8]
11 b_9 = [1532.87, 525.63, 332.35, 170.57]
12
13 # 此处是为了将数据换一种方式存储,一开始b_7存储的是7号的的4部电影的票房数据,经过转换后y1存储了无名之辈的7号,8号,9号的票房数据
14 b = b_7 + b_8 + b_9
15 y_1 = []
16 y_2 = []
17 y_3 = []
18 y_4 = []
19 for i in range(len(b)):
20 if i % 4 == 0:
21 y_1.append(b[i])
22 elif i % 4 == 1:
23 y_2.append(b[i])
24 elif i % 4 == 2:
25 y_3.append(b[i])
26 else:
27 y_4.append(b[i])
28
29 # 此处设置bar_width是为了不要让柱状图重叠
30 # 本来一次plt.bar(x,y)函数绘制一个直方图,然后要绘制4个的话,为了避免重叠掉,就要设置一定的间距
31 bar_width = 0.2
32 x_1 = [i for i in range(3)]
33 x_2 = [i+bar_width for i in x_1]
34 x_3 = [i+bar_width*2 for i in x_1]
35 x_4 = [i+bar_width*3 for i in x_1]
36
37 # 设置图像大小
38 plt.figure(figsize=(20, 8), dpi=80)
39
40 # 绘制直方图
41 plt.bar(x_1, y_1, width=bar_width, label="无名之辈", color='#87CEFA')
42 plt.bar(x_2, y_2, width=bar_width, label="狗十三", color='#ADFF2F')
43 plt.bar(x_3, y_3, width=bar_width, label="毒液:\n致命守护者", color='#FFD700')
44 plt.bar(x_4, y_4, width=bar_width, label="憨豆特工3", color='#FFFACD')
45
46 # 添加图例
47 plt.legend(prop=my_font, loc=5)
48
49 #调整x和y的刻度
50 x_tick = [i+0.1 for i in x_2]
51 xtick_label = ['12月7日', '12月8日', '12月9日']
52 plt.xticks(x_tick, xtick_label, fontproperties=my_font, fontsize=15)
53 plt.yticks(fontsize=15)
54
55 # 添加描述信息
56 # plt.xlabel("日期", fontproperties=my_font, fontsize=20)
57 plt.ylabel("票房(亿元)", fontproperties=my_font, fontsize=20)
58 plt.title("电影票房", fontproperties=my_font, fontsize=20)
59
60 # 绘制网格,alpha设置透明度
61 plt.grid(alpha=0.3)
62
63 # 添加折线图的描述信息,text(x, y, s, fontdict=None, withdash=False, **kwargs)其中s为描述信息的文字
64 xa = x_1 + x_2 + x_3 + x_4
65 yb = y_1 + y_2 + y_3 + y_4
66 for a1, b1 in zip(xa, yb):
67 plt.text(a1, b1, b1, ha='center', va='bottom', fontsize=14)
68
69 plt.savefig('T2.png')
70 plt.show()
显示效果如下图:

使用matplotlib中的bar函数绘制柱状图的更多相关文章
- Python Matplotlib 中对于 bar 显示时间的问题
参考: 官方教程: http://matplotlib.org/1.3.1/users/recipes.html http://stackoverflow.com/questions/13515471 ...
- matplotlib中 plt.plot() 函数中**kwargs的参数形式
plt.plot(x, y, **kwargs) **kwargs的参数大致有如下几种: color: 颜色 linestyle: 线条样式 marker: 标记风格 markerfacecolor: ...
- 浅谈python中的闭包函数
闭包函数初探 通常我们定义函数都是这样定义的 def foo(): pass 其实在函数式编程中,函数里面还可以嵌套函数,如下面这样 def foo(): print("hello worl ...
- matplotlib绘制柱状图
参考自Matplotlib Python 画图教程 (莫烦Python)(11)_演讲•公开课_科技_bilibili_哔哩哔哩 https://www.bilibili.com/video/av16 ...
- Python——使用matplotlib绘制柱状图
Python——使用matplotlib绘制柱状图 1.基本柱状图 首先要安装matplotlib(http://matplotlib.org/api/pyplot_api.htm ...
- matplotlib bar函数重新封装
参考: https://blog.csdn.net/jenyzhang/article/details/52047557 https://blog.csdn.net/liangzuojiayi/art ...
- matplotlib中使用imshow绘制二维图
#coding:utf-8 from matplotlib import mpl import matplotlib.pyplot as plt#载入matplotlib快速绘图的函数库 import ...
- Matplotlib 中常见的图形
# 导包 from matplotlib import pyplot as plt import numpy as np 线性图 简单线性图 在图表的所有类型中,线性图最为简单.线性图的各个数据点由一 ...
- Python使用Plotly绘图工具,绘制柱状图
使用Plotly绘制基本的柱状图,需要用到的函数是graph_objs 中 Bar函数 通过参数,可以设置柱状图的样式. 通过barmod进行设置可以绘制出不同类型的柱状图出来. 我们先来实现一个简单 ...
随机推荐
- Python 爬取 书籍
... import requests from bs4 import BeautifulSoup def gethtml(url,h): r = requests.get(url,headers=h ...
- [bzoj1032]祖码
先将连续的一段相同的点连起来,然后考虑对于一段区间,分两种情况:1.首尾两点再同时消掉,必然要先将去掉首尾的一段消掉后再消2.首尾两点再不同时刻消掉,那么必然存在一个断点k,使得k左右无关(题目中的错 ...
- 【Golang】基于beego/orm实现相同表结构不同表名的分表方法实现
一.背景 在业务场景开发的过程中, 随着数据量的增加,相同表结构不同表名的分表策略是常用的方案选择之一.如下以golang做为后端业务开发,尝试修改beego的orm库做一个相同表结构不同表名的分表实 ...
- 保姆级神器 Maven,再也不用担心项目构建搞崩了
今天来给大家介绍一款项目构建神器--Maven,不仅能帮我们自动化构建,还能够抽象构建过程,提供构建任务实现:它跨平台,对外提供了一致的操作接口,这一切足以使它成为优秀的.流行的构建工具,从此以后,再 ...
- C/C++ Qt TreeWidget 嵌套节点操作技巧
在上一篇博文<C/C++ Qt TreeWidget 单层树形组件应用>中给大家演示了如何使用TreeWidget组件创建单层树形结构,并给这个树形组件增加了右键菜单功能,接下来将继续延申 ...
- Nocalhost 为 KubeSphere 提供更强大的云原生开发环境
作者简介 张海立(驭势科技云平台研发总监):开源爱好者,云原生社区上海站 PMC 成员,KubeSphere Ambassador:日常云原生领域工作涉及 Kubernetes.DevOps.可观察性 ...
- 洛谷 P6776 - [NOI2020] 超现实树(找性质,神仙题)
洛谷题面传送门 nb tea 一道! 首先考虑怎样入手分析这个看似非常不可做的问题.首先题目涉及高度无穷的树,根本枚举不了.不过我们冷静一下就会发现,如果我们记 \(mx=\max\limits_{i ...
- seq生成格式化字符
[root@ansz.quan.bbs ~]$seq -s "+" 10 1+2+3+4+5+6+7+8+9+10 seq为生成数字序列 -s 分隔符
- zabbix忘记密码——进入数据库修改
登录数据库,选择zabbix数据库 查看数据库里面的表 用户和用户密码在users表里面 将你想设置的密码进行MD5加密处理: 更新密码即可: update users set passwd=&quo ...
- 非标准的xml解析器的C++实现:一、思考基本数据结构的设计
前言: 我在C++项目中使用xml作为本地简易数据管理,到目前为止有5年时间了,从最初的全文搜索标签首尾,直到目前项目中实际运用的类库细致到已经基本符合w3c标准,我一共写过3次解析器,我自己并没有多 ...