亲宝软件园·资讯

展开

小白学 Python 数据分析(18):Matplotlib(三)常用图表(上)

极客挖掘机 人气:2
![](https://cdn.geekdigging.com/python/spider-blog/Python_logo.jpg) > 人生苦短,我用 Python 前文传送门: [小白学 Python 数据分析(1):数据分析基础](https://www.geekdigging.com/2020/01/19/6719980708/) [小白学 Python 数据分析(2):Pandas (一)概述](https://www.geekdigging.com/2020/01/20/6718497214/) [小白学 Python 数据分析(3):Pandas (二)数据结构 Series](https://www.geekdigging.com/2020/02/04/3234667780/) [小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame](https://www.geekdigging.com/2020/02/05/9920298470/) [小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据](https://www.geekdigging.com/2020/02/16/6852411690/) [小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择](https://www.geekdigging.com/2020/02/20/6566891797/) [小白学 Python 数据分析(7):Pandas (六)数据导入](https://www.geekdigging.com/2020/02/23/7355903936/) [小白学 Python 数据分析(8):Pandas (七)数据预处理](https://www.geekdigging.com/2020/02/25/9013297409/) [小白学 Python 数据分析(9):Pandas (八)数据预处理(2)](https://www.geekdigging.com/2020/02/27/2857868620/) [小白学 Python 数据分析(10):Pandas (九)数据运算](https://www.geekdigging.com/2020/02/29/5808964196/) [小白学 Python 数据分析(11):Pandas (十)数据分组](https://www.geekdigging.com/2020/03/03/5975552137/) [小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)](https://www.geekdigging.com/2020/03/04/8327177610/) [小白学 Python 数据分析(13):Pandas (十二)数据表拼接](https://www.geekdigging.com/2020/03/06/5036602239/) [小白学 Python 数据分析(14):Pandas (十三)数据导出](https://www.geekdigging.com/2020/03/07/6918490736/) [小白学 Python 数据分析(15):数据可视化概述](https://www.geekdigging.com/2020/03/09/7393240956/) [小白学 Python 数据分析(16):Matplotlib(一)坐标系](https://www.geekdigging.com/2020/03/14/2444388683/) [小白学 Python 数据分析(17):Matplotlib(二)基础操作](https://www.geekdigging.com/2020/03/16/2401104162/) ## 折线图 各位同学好,我们从本篇开始介绍一些 Matplotlib 的常用图表。 说道常用图表,第一个肯定是折线图,折线图主要用于表现随着时间的推移而产生的某种趋势。 在 Matplotlib 中,化折线图主要是使用到了 plt 库中的 plot 方法,下面我们看下 plot 的语法。 plot 函数的一般的调用形式如下: ```python #单条线: 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 参数进行组合赋值。 ```python plot(x, y, 'bo-') ``` 上面这个示例中的 `bo-` 的含义是蓝色圆点实线,其中 `b` 代表了颜色 blue , `o` 代表了点型 circle marker (圆点), `-` 代表了线型 solid line style (实线) 。 如果我们使用全名的话上面这个示例可以改成: ```python plot(x, y, color='blue', marker='o', linestyle='-') ``` 下面小编摘抄一下官方文档上的对应的类型,官方文档地址:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html ,如果不想打开官方文档,也可以在程序中运行下面这段代码,一样可以看到: ```python import matplotlib.pyplot as plt help(plt.plot) ``` 首先是颜色 color 的可取值: ```python ============= =============================== character color ============= =============================== ``'b'`` blue ``'g'`` green ``'r'`` red ``'c'`` cyan ``'m'`` magenta ``'y'`` yellow ``'k'`` black ``'w'`` white ============= =============================== ``` 这里有一点需要注意,除了可以使用上面的这些值,同样可以使用十六进制的 RGB 字符串,如: `#FFFFFF` 等。 接下来是点型 Maker 的可选值: ```python ============= =============================== 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 的可选值: ```python ============= =============================== character description ============= =============================== ``'-'`` solid line style 实线 ``'--'`` dashed line style 虚线 ``'-.'`` dash-dot line style 点画线 ``':'`` dotted line style 点线 ============= =============================== ``` 这个就不解释了吧,各位同学可以自行尝试一下。 最后再来个示例吧,数据还是使用上一篇文章的: ```python 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") ``` 结果如下: ![](https://cdn.geekdigging.comhttps://img.qb5200.com/download-x/data_analysishttps://img.qb5200.com/download-x/data_visualization/plot_demo.png) 这个样例中,我们将产品销量使用点线图来表示。 ## 柱状图 ### 普通柱状图 柱状图主要用于查看各分组数据的数量分布,以及各个分组数据之间的数量比较。 在 Matplotlib 中使用的是 `bar()` 方法,还是先看下 `bar()` 的语法: ```python 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 。 我们还是先来一个简单的示例,数据依然使用上面的数据: ```python 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 : 图例 结果如下: ![](https://cdn.geekdigging.comhttps://img.qb5200.com/download-x/data_analysishttps://img.qb5200.com/download-x/data_visualization/bar_demo_1.png) ### 并排柱状图 我们还有一组数据,接下来是两个柱形图并列显示,这里调用的还是 `bar()` ,只不过需要调整的是柱子的位置: ```python 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 ,否则会造成重合。 结果如下: ![](https://cdn.geekdigging.comhttps://img.qb5200.com/download-x/data_analysishttps://img.qb5200.com/download-x/data_visualization/bar_demo_2.png) ### 堆积柱状图 还有一种柱形图是堆积柱形图,就是把柱状图堆叠在一起,我们还是通过示例来看: ```python 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 来实现的,含义是底部开始的位置。 结果如下: ![](https://cdn.geekdigging.comhttps://img.qb5200.com/download-x/data_analysishttps://img.qb5200.com/download-x/data_visualization/bar_demo_3.png) ### 横向柱状图 其实横向柱状图应该是叫条形图,而且使用的方法也不再是 `bar()` 了,而是变成了 `barh()` 。 咦,这个看起来和 `bar()` 很像嘛,有可能是兄弟关系。 语法如下: ```python matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', **kwargs) ``` 也不多说啥了,和上面的 `bar()` 简直如出一辙,还是再来个示例: ```python 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") ``` 结果如下: ![](https://cdn.geekdigging.comhttps://img.qb5200.com/download-x/data_analysishttps://img.qb5200.com/download-x/data_visualization/barh_demo.png) 本篇内容就到这里了,各位同学想要代码或者想要图片都可以直接访问代码仓库获得。 ## 代码仓库 老规矩,所有的示例代码都会上传至代码管理仓库 Github 和 Gitee 上,方便大家取用。 [示例代码-Github](https://github.com/meteor1993/python-learning/tree/master/python-data-analysis/matplotlib "示例代码-Github") [示例代码-Gitee](https://gitee.com/inwsy/python-learning/tree/master/python-data-analysis/matplotlib "示例代码-Gitee") ## 参考 https://blog.csdn.net/sinat_36219858/articlehttps://img.qb5200.com/download-x/details/79800460 https://blog.csdn.net/weixin_40683253/articlehttps://img.qb5200.com/download-x/details/87641416

加载全部内容

相关教程
猜你喜欢
用户评论