1. Matplotlib简介

Matplotlib是目前应用最广泛的用于制图及其他二维数据可视化的Python库。在命令行中输入pip install matplotlib即可进行安装。在matplotlib这个模块中,最常用的是其中一个子模块pyplot,通常这样导入:

import matplotlib.pyplot as plt

pyplot最基础的作图方式是以点作图,并用线将这些点连起来。以正弦函数为例,可以用pyplot画出它的图像:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2 * np.pi, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.show()

同时,还有一些可选的字符串缩写参数可以指定颜色和线条样式。例如plt.plot(x, y, 'ko--')指黑色虚线、坐标点标记为圆点。通常,可选的颜色有b(蓝)、g(绿)、r(红)、c(蓝绿)、m(洋红)、y(黄)、k(黑)、w(白);点标记有"."、","、"o"、"v"、"^"、">"、"<"、"*"、"+"等;线条类型有":"、"-."、"--"、"-"。

2. 数据展示的常用图表类型

①趋势:一种常见的时间序列关系,关注数据如何随时间变化。最常见的是折线图,能很好地表现指标随时间呈现的趋势。

②构成:关注每个部分占整体的比例,如份额、百分比等,最常见的是饼图。

③比较:可以展示某个维度上的排列顺序,常见的如条图、堆叠条图。

④分布:关注数据的集中、频率、分布情况,如地图、直方图、散点图。

⑤联系:查看两个变量之间是否表现出预期的相关关系,如散点图、雷达图。

3. 绘制折线图

折线图的基本画法是使用plt.plot()方法,传入的参数是坐标点。例如,要画出两种商品在一周内的销量对比图,可以通过如下代码实现:

x = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
y1 = [61, 42, 53, 72, 86, 91, 73]
y2 = [23, 26, 67, 38, 46, 54, 36]
# 设置字体,避免中文乱码
plt.rcParams['font.family'] = ['SimHei']
# 传入label参数用于图例
plt.plot(x, y1, label = '商品A')
plt.plot(x, y2, label = '商品B')
# 设置x, y轴标签
plt.xlabel('时间')
plt.ylabel('销量')
# 设置图表标题
plt.title('A、B商品销量对比图')
# 显示图例
plt.legend()
plt.show()

在上面的代码中,不要忽略设置中文字体的步骤,否则中文将会出现乱码。可以通过如下代码查看已经安装的字体,从中选择:

import matplotlib.font_manager as fm
for font in fm.fontManager.ttflist:print(font.name)

此外,图表一般需要加入图例,在调用plt.plot()方法时传入label参数,接着调用plt.legend()方法显示图例即可。通常,matplotlib会自动将图例置于合适位置,如果想自行选择图例位置,可以通过向plt.legend()传入loc参数实现。

最后,通过plt.xlabel()和plt.ylabel()可以设置x轴和y轴的标签,通过plt.title()可以设置图表的标题。

4. 绘制柱状图

1) 普通柱状图

绘制普通柱状图只要调用plt.bar()方法即可。两个必选参数中,第一个参数是x轴上刻度的标签序列,第二个参数是对应的数据。例如,绘制体育课选课情况,可以通过如下代码:

names = ['篮球', '足球', '网球']
nums = [20, 18, 26]
plt.bar(names, nums)
plt.show()

此外,plt.bar()还有一些可选参数,如width和color,分别用于设置柱子的宽度和颜色。

2) 堆叠柱状图

堆叠柱状图不仅可以展示每个分类的总量,还能展示该分类包含的每个小分类的大小及占比,适合处理部分与整体的关系。例如,在上面代码的基础上,要展示不同性别学生的选课情况,可以通过如下代码来绘制堆叠柱状图:

names = ['篮球', '足球', '网球']
nums_boy = [15, 9, 10]
nums_girl = [5, 9, 16]
plt.bar(names, nums_boy, width = 0.6, color = 'blue', label = '男生')
plt.bar(names, nums_girl, bottom = nums_boy, width = 0.6, color = 'pink', label = '女生')
plt.legend()
plt.show()

与前面的代码相比,上面的代码多调用了一次plt.bar()方法,并传入了bottom参数,用于控制后一个柱状图绘制时底端的位置。如果没有设置bottom参数,后面绘制的柱状图就会覆盖在原来的图形上。

3) 分组柱状图

分组柱状图常用于不同组间数据的比较,这些组都包含了相同分类的数据。例如,将上面的分类绘制为分组柱状图:

x = np.arange(3)
width = 0.3
names = ['篮球', '足球', '网球']
nums_boy = [15, 9, 10]
nums_girl = [5, 9, 16]
plt.bar(x - width / 2, nums_boy, width = width, color = 'blue', label = '男生')
plt.bar(x + width / 2, nums_girl, width = width, color = 'pink', label = '女生')
plt.xticks(x, names)
plt.legend()
plt.show()

上述代码中,首先使用np.arange(3)创建了一个数组[0 1 2],并定义了一个变量width用于指定柱子的宽度。在调用plt.bar()时,第一个参数分别是[0 1 2]加上和减去柱子的宽度得到的刻度作为两组柱子的中点。最后,调用plt.xticks()方法将x轴上的刻度改为对应的标签即可。

5. 绘制饼图

饼图可以用于表示不同分类的占比情况,通过弧度大小来对比各种分类。绘制饼图只要传入数据和对应的标签给plt.pie()即可。以某地三大产业的占比为例,可以用如下代码绘制饼图:

data = [64745.2, 364835.2, 489700.8]
labels = ['第一产业', '第二产业', '第三产业']
plt.pie(data, labels = labels, autopct = '%0.1f%%')
plt.show()

其中,autopct参数代表图中百分比保留的小数位数,'%0.1f%%'表示保留一位小数,'%0.2f%%'表示保留两位小数。

此外,也可使用explode参数来让饼图中的某一部分突出显示,从而强调某项数据。explode参数中的元素默认都是0,将突出显示的部分对应位置的值设大一点,就可将对应的区块抽离出来。

data = [64745.2, 364835.2, 489700.8]
labels = ['第一产业', '第二产业', '第三产业']
explode = (0.1, 0, 0)
plt.pie(data, explode = explode, labels = labels, autopct = '%0.1f%%')
plt.show()

6. 绘制子图

一张图表很难同时分析多个维度,因此可以把多张图绘制在一起,进行多个维度的查看比较。通过matplotlib中的子图,可以在一张图中绘制多个图表。

调用plt.subplot()方法可以添加子图。plt.subplot()方法的前两个参数分别是子图的行数和列数,第三个参数是选中的子图的序号。使用set_title()可以为每个子图设置单独的标题,通过plt.suptitile()可以设置带有子图的图表的总标题。

例如,在一张图中绘制三个三角函数的图像:

x = np.arange(0, 2 * np.pi, 0.1)
plt.suptitle('三角函数图像')
ax1 = plt.subplot(2, 2, 1)
ax1.set_title('sin函数')
y1 = np.sin(x)
ax1.plot(x, y1)
ax2 = plt.subplot(2, 2, 2)
ax2.set_title('cos函数')
y2 = np.cos(x)
ax2.plot(x, y2)
ax3 = plt.subplot(2, 1, 2)
ax3.set_title('tan函数')
y3 = np.tan(x)
ax3.plot(x, y3)
plt.show()

Reference:

[1] Wes McKinney. 2017. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython, 2nd Edition [M]. O'Reilly Media, Inc.

[2] CSDN博客. Python博客[OL]. https://www.csdn.net/nav/python. 2020.

[3] 扇贝编程. Python数据分析[OL]. 扇贝编程. 2020.

[4] 万门教育. 69节入门Python[OL]. https://www.wanmen.org/courses/5d9ed3436cb56f1eb915c49e/lectures/5d9ed3632dea4654fa0a4b9f. 2020.

matplotlib plot 分组_Python数据分析模块二:Matplotlib相关推荐

  1. python matplotlib模块解析_Python数据分析模块二:Matplotlib

    1. Matplotlib简介 Matplotlib是目前应用最广泛的用于制图及其他二维数据可视化的Python库.在命令行中输入pip install matplotlib即可进行安装.在matpl ...

  2. matplotlib 柱状图 分组_Python数据分析与可视化之matplotlib可视化(三)

    散点图显示字段相关性 文章目录 加载远程的数据集 散点图与乱码问题 Matplotlib 是 Python 的绘图库. 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案. 默 ...

  3. matplotlib plot 分组_小白学 Python 数据分析(16):Matplotlib(一)坐标系

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  4. matplotlib 子图超过4个_Python数据分析:用Matplotlib可视化创建套图

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Trochil蜂鸟数据 ,作者 蜂鸟数据Trochil 一图胜千言 ...

  5. python 数组 运算_python数据分析(二) python numpy--数组和矢量运算--数组对象

    Numpy numpy是数值计算最重要的基础包,几乎所有的科学运算的模块底层所用的都是numpy数组. Numpy本身没有提供多么高级的数据分析功能,他所提供的功能主要是: 1.具有矢量算术运算(用数 ...

  6. python用matplotlib画玫瑰_Python可视化:用Matplotlib画个玫瑰图

    emmmm,差不多 差不多就行,哈哈哈 100%还原太麻烦了 文字的和其他的修饰,作者实在嫌麻烦,有兴趣的朋友,可以自己尝试一下 下面进入教学时间,大家鼓掌 1.什么是玫瑰图 玫瑰图,玫瑰图,就是长得 ...

  7. python 可视化分析平台_python 数据分析数据可视化工具matplotlib

    说明: 数据可视化中的数据集下载地址:(数据来源:从零开始学python数据分析和挖掘) 链接:https://pan.baidu.com/s/1zrNpzSNVHd8v1rGFRzKipQ 提取码: ...

  8. python如何读取mat文件可视化_python 数据分析--数据可视化工具matplotlib

    说明: 数据可视化中的数据集下载地址:(数据来源:从零开始学python数据分析和挖掘) 链接:https://pan.baidu.com/s/1zrNpzSNVHd8v1rGFRzKipQ 提取码: ...

  9. Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  10. python ppt 绘图_Python数据分析-Matplotlib绘图基础

    本文结构: 一.Matplotlib绘图基础及中文乱码解决 二.如何利用pandas绘图? 三.如何利用notebook制作分析报告? 图形在我们日常生活中无处不在.如果没有可视化,就是一些数字罗列, ...

最新文章

  1. JavaScript高级程序设计(第3版)第六章读书笔记
  2. git上传代码到码云(详细)
  3. linux七大功能,值得Linux向其他系统借鉴的七大功能特性
  4. 构建和实现单点登录解决方案(转载于IBMdeveloperWorks)
  5. python命令行解析_python命令行解析函数
  6. linux调用ocx插件_Wordpress file manager插件任意文件上传
  7. 首批共享单车死于 2019
  8. 【超链接】多媒体工具网站
  9. android html转ubb,将 html 转成 ubb代码的小脚本
  10. oracle分析函数技术详解(配上开窗函数over())
  11. 全国高等学校非计算机专业计算机水平考试一级,全国高等学校计算机一级考试选择题题库及答案参考...
  12. Ubuntu pptp服务器搭建教程(保姆级)
  13. 电脑锁屏蓝牙鼠标断开_如何阻止蓝牙鼠标不断断开
  14. 云服务器搭建深度学习环境
  15. 【精讲】微信小程序 基础内容(组件)入门
  16. 人生于世上,有几个知己……
  17. iOS keyChain 研究
  18. ctfshow—Node.js漏洞总结
  19. 《30天自制操作系统》第一天
  20. iPad 使用技巧:虚拟键盘与实体键盘

热门文章

  1. 4.SOA架构:服务和微服务分析及设计--- Web服务及微服务的分析与建模
  2. oracle 的数据库、表空间、表是什么关系
  3. struts标签的使用
  4. PADS9.5 原理图和封装制作——以STM32F103为例
  5. Python - 进程/线程相关整理
  6. SocketServer模块中的几种类
  7. POJ P1185 炮兵阵地 【状压dp】
  8. C++ string和wstring互转实现
  9. 在SQL Server 2005中实现异步触发器架构
  10. gb2312和utf8 转换