小白学 Python 数据分析(18):Matplotlib(三)常用图表(上)
人生苦短,我用 Python
前文传送门:
小白学 Python 数据分析(2):Pandas (一)概述
小白学 Python 数据分析(3):Pandas (二)数据结构 Series
小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame
小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据
小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择
小白学 Python 数据分析(7):Pandas (六)数据导入
小白学 Python 数据分析(8):Pandas (七)数据预处理
小白学 Python 数据分析(9):Pandas (八)数据预处理(2)
小白学 Python 数据分析(10):Pandas (九)数据运算
小白学 Python 数据分析(11):Pandas (十)数据分组
小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)
小白学 Python 数据分析(13):Pandas (十二)数据表拼接
小白学 Python 数据分析(14):Pandas (十三)数据导出
小白学 Python 数据分析(16):Matplotlib(一)坐标系
小白学 Python 数据分析(17):Matplotlib(二)基础操作
折线图
各位同学好,我们从本篇开始介绍一些 Matplotlib 的常用图表。
说道常用图表,第一个肯定是折线图,折线图主要用于表现随着时间的推移而产生的某种趋势。
在 Matplotlib 中,化折线图主要是使用到了 plt 库中的 plot 方法,下面我们看下 plot 的语法。
plot 函数的一般的调用形式如下:
#单条线:
plot([x], y, [fmt], *, data=None, **kwargs)
#多条线:
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
可选参数 [fmt]
是一个字符串来定义图的基本属性如:颜色(color),点型(marker),线型(linestyle)。
具体形式 fmt = '[color][marker][line]'
这里我们写一个简单的 fmt 的表达式,需要注意的是 fmt 接收的是每个属性的单个字母缩写,如果使用的是全名的话则不能使用 fmt 参数进行组合赋值。
plot(x, y, 'bo-')
上面这个示例中的 bo-
的含义是蓝色圆点实线,其中 b
代表了颜色 blue , o
代表了点型 circle marker (圆点), -
代表了线型 solid line style (实线) 。
如果我们使用全名的话上面这个示例可以改成:
plot(x, y, color='blue', marker='o', linestyle='-')
下面小编摘抄一下官方文档上的对应的类型,官方文档地址:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html ,如果不想打开官方文档,也可以在程序中运行下面这段代码,一样可以看到:
import matplotlib.pyplot as plt
help(plt.plot)
首先是颜色 color 的可取值:
============= ===============================
character color
============= ===============================
``'b'`` blue
``'g'`` green
``'r'`` red
``'c'`` cyan
``'m'`` magenta
``'y'`` yellow
``'k'`` black
``'w'`` white
============= ===============================
这里有一点需要注意,除了可以使用上面的这些值,同样可以使用十六进制的 RGB 字符串,如: #FFFFFF
等。
接下来是点型 Maker 的可选值:
============= ===============================
character description
============= ===============================
``'.'`` point marker
``','`` pixel marker
``'o'`` circle marker
``'v'`` triangle_down marker
``'^'`` triangle_up marker
``'<'`` triangle_left marker
``'>'`` triangle_right marker
``'1'`` tri_down marker
``'2'`` tri_up marker
``'3'`` tri_left marker
``'4'`` tri_right marker
``'s'`` square marker
``'p'`` pentagon marker
``'*'`` star marker
``'h'`` hexagon1 marker
``'H'`` hexagon2 marker
``'+'`` plus marker
``'x'`` x marker
``'D'`` diamond marker
``'d'`` thin_diamond marker
``'|'`` vline marker
``'_'`` hline marker
============= ===============================
大家看前面的符号应该大致都能知道是啥意思吧,小编这里有点小懒(属实有点多,小编自己的碎碎念:常用的就那么几种,一张图上也不会出现太多种的线型,反正会有默认值),就不翻译了,如果有看不懂的同学可以 CV 后面的英文到某些翻译网站上自行翻译。
接下来是线型 Line Styles 的可选值:
============= ===============================
character description
============= ===============================
``'-'`` solid line style 实线
``'--'`` dashed line style 虚线
``'-.'`` dash-dot line style 点画线
``':'`` dotted line style 点线
============= ===============================
这个就不解释了吧,各位同学可以自行尝试一下。
最后再来个示例吧,数据还是使用上一篇文章的:
import matplotlib.pyplot as plt
# 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
x_data = [2011,2012,2013,2014,2015,2016,2017]
y_data = [58000,60200,63000,71000,84000,90500,107000]
y_data_1 = [78000,80200,93000,101000,64000,70500,87000]
plt.title(label='xxx 公司 xxx 产品销量')
# 设置标题
plt.plot(x_data, y_data, linestyle = '-.', label = '产品销量')
plt.plot(x_data, y_data_1, label = '用户增长数')
# 开启网格线
plt.grid(True)
# 设置图例
plt.legend()
# 文件保存
plt.savefig("plot_demo.png")
结果如下:
这个样例中,我们将产品销量使用点线图来表示。
柱状图
普通柱状图
柱状图主要用于查看各分组数据的数量分布,以及各个分组数据之间的数量比较。
在 Matplotlib 中使用的是 bar()
方法,还是先看下 bar()
的语法:
atplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)
参数 | 接收值 | 说明 | 默认值 |
---|---|---|---|
left | array | x 轴; | 无 |
height | array | 柱形图的高度,也就是y轴的数值; | 无 |
alpha | 数值 | 柱形图的颜色透明度 ; | 1 |
width | 数值 | 柱形图的宽度; | 0.8 |
color(facecolor) | string | 柱形图填充的颜色; | 随机色 |
edgecolor | string | 图形边缘颜色 | None |
label | string | 解释每个图像代表的含义 | 无 |
linewidth(linewidths / lw) | 数值 | 边缘or线的宽度 | 1 |
其他详细的用法可以参考官方文档:https://matplotlib.org/api/pyplot_api.html 。
我们还是先来一个简单的示例,数据依然使用上面的数据:
import matplotlib.pyplot as plt
import numpy as np
# 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
y_data = np.array([58000,60200,63000,71000,84000,90500,107000])
y_data_1 = np.array([78000,80200,93000,101000,64000,70500,87000])
plt.title(label='xxx 公司 xxx 产品销量')
plt.bar(x_data, y_data, width=0.5, alpha=0.6, facecolor = 'deeppink', edgecolor = 'darkblue', lw=2, label='产品销量')
plt.legend()
plt.savefig("bar_demo_1.png")
- width : 柱子的宽度
- alpha : 透明度
- facecolor : 柱子填充色
- edgecolor : 柱子轮廓色
- lw : 柱子轮廓宽度
- label : 图例
结果如下:
并排柱状图
我们还有一组数据,接下来是两个柱形图并列显示,这里调用的还是 bar()
,只不过需要调整的是柱子的位置:
import matplotlib.pyplot as plt
import numpy as np
# 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
y_data = np.array([58000,60200,63000,71000,84000,90500,107000])
y_data_1 = np.array([78000,80200,93000,101000,64000,70500,87000])
plt.title(label='xxx 公司 xxx 产品销量')
plt.bar(x_data, y_data, width=0.3, alpha=0.6, facecolor = 'pink', edgecolor = 'blue', lw=1, label='产品销量')
plt.bar(x_data + 0.3, y_data_1, width=0.3, alpha=0.6, facecolor = 'blue', edgecolor = 'blue', lw=1, label='用户增长数')
plt.legend()
plt.savefig("bar_demo_2.png")
这里比较重要的是 x_data + 0.3
,相当于把用户量的柱子向右移动了 0.3 ,否则会造成重合。
结果如下:
堆积柱状图
还有一种柱形图是堆积柱形图,就是把柱状图堆叠在一起,我们还是通过示例来看:
import matplotlib.pyplot as plt
import numpy as np
# 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
y_data = np.array([58000,60200,63000,71000,84000,90500,107000])
y_data_1 = np.array([78000,80200,93000,101000,64000,70500,87000])
plt.title(label='xxx 公司 xxx 产品销量')
plt.bar(x_data, y_data, width=0.3, alpha=0.6, facecolor = 'pink', edgecolor = 'blue', lw=1, label='产品销量')
plt.bar(x_data, y_data_1, bottom=y_data, width=0.3, alpha=0.6, facecolor = 'blue', edgecolor = 'blue', lw=1, label='用户增长数')
plt.legend()
plt.savefig("bar_demo_3.png")
这种堆积柱状图主要是通过参数 bottom 来实现的,含义是底部开始的位置。
结果如下:
横向柱状图
其实横向柱状图应该是叫条形图,而且使用的方法也不再是 bar()
了,而是变成了 barh()
。
咦,这个看起来和 bar()
很像嘛,有可能是兄弟关系。
语法如下:
matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
也不多说啥了,和上面的 bar()
简直如出一辙,还是再来个示例:
import matplotlib.pyplot as plt
import numpy as np
# 处理中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
y_data = np.array([58000,60200,63000,71000,84000,90500,107000])
plt.title(label='xxx 公司 xxx 产品销量')
plt.barh(x_data, y_data, alpha=0.6, facecolor = 'deeppink', edgecolor = 'deeppink', label='产品销量')
plt.legend()
plt.savefig("barh_demo.png")
结果如下:
本篇内容就到这里了,各位同学想要代码或者想要图片都可以直接访问代码仓库获得。
代码仓库
老规矩,所有的示例代码都会上传至代码管理仓库 Github 和 Gitee 上,方便大家取用。
参考
https://blog.csdn.net/sinat_36219858/article/details/79800460
https://blog.csdn.net/weixin_40683253/article/details/87641416
小白学 Python 数据分析(18):Matplotlib(三)常用图表(上)的更多相关文章
- 小白学 Python 数据分析(19):Matplotlib(四)常用图表(下)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(17):Matplotlib(二)基础操作
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(16):Matplotlib(一)坐标系
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame
在家为国家做贡献太无聊,不如跟我一起学点 Python 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Panda ...
- 小白学 Python 数据分析(20):pyecharts 概述
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(21):pyecharts 好玩的图表(系列终篇)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(2):Pandas (一)概述
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 概览 首先还是几个官方链接放一下: Pandas 官网:https://pandas.pydata.or ...
- 小白学 Python 数据分析(7):Pandas (六)数据导入
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(9):Pandas (八)数据预处理(2)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
随机推荐
- SpringMVC学习笔记二:参数接受
该项目用来介绍SpringMVC对参数接受的方法: 项目目录树:在前一个项目上修改添加 新添加了Student类和Group类,用来测试整体参数接受 Student.java package com. ...
- (警告)不要轻易删除libc.so.6,以及误删恢复
网上有很多帖子介绍升级libc.so.6库的帖子,这里存在巨大的坑: 如: Linux/CentOS 升级C基本运行库CLIBC的注意事项(当想解决GLIBC_2.x找不到的编译问题) 里边都会有这样 ...
- IOS下的safari下localStorage不起作用的问题
我们的一个小应用,使用百度地图API获取到用户的坐标之后用localStorage做了下缓存,测试上线之后有运营同学反馈页面数据拉取不到, 测试的时候没有发现问题,而且2台相同的iphone一台可以一 ...
- Dockfile自动创建discuz论坛和可道云
将discuz论坛的zip包解压之后用tar包压缩,这样ADD可以直接解压tar包. [root@localhost centos6.9_ssh_discuz]# pwd /opt/dockerfil ...
- NBA球星的生意经 个人流量化之路
个人流量化之路" title="NBA球星的生意经 个人流量化之路"> 在国人欢天喜地的庆祝新春佳节之时,大洋彼岸也在进行着让全球篮球迷为之"着魔&quo ...
- Lego:美团点评接口自动化测试实践
概述 接口自动化概述 众所周知,接口自动化测试有着如下特点: 低投入,高产出. 比较容易实现自动化. 和UI自动化测试相比更加稳定. 如何做好一个接口自动化测试项目呢? 我认为,一个“好的”自动化 ...
- Python---9高级特性
一.切片 取一个list或tuple的部分元素是非常常见的操作.比如,一个list如下: >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', ' ...
- connect() failed (111: Connection refused) while connecting to upstream报错处理
新lnmp环境调试项目时,nginx报错如下: 解决: 发现php-fpm.conf是以套接字方式通信,而nginx是以端口方式通信,见下图: 将nginx.conf修改为如下,重新reload即可
- 三星HTC价格跳水 安卓旗舰会否崩塌?
安卓旗舰会否崩塌?" title="三星HTC价格跳水 安卓旗舰会否崩塌?"> 官方降价,对于国产手机来说似乎是家常便饭.小米.魅族等,总会时隔几个月就将自家旗舰机 ...
- STM32F103驱动ADS1118
ADS1118 作为常用温度测量芯片被越来越多的开发者熟知,TI官方给出的是基于 MSP430 的驱动测试程序,由于 STM32 的普及,闲暇中移植了 MSP430 的 ADS1118 驱动程序到 S ...