Python 数据分析与展示笔记3 – Matplotlib 库基础


Python 数据分析与展示系列笔记是笔者学习、实践Python 数据分析与展示的相关笔记

课程链接: Python 数据分析与展示

参考文档:
Numpy 官方文档(英文)
Numpy 官方文档(中文)
PIL 官方文档
Matplotlib 官方文档


一、Matplotlib 库


Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。

1、安装与导入

# 安装
pip install matplotlib# 导入,常用的是他的绘图子模块 pyplot
import matplotlib.pyplot as plt

2、测试

import matplotlib.pyplot as pltplt.plot([2, 1, 4, 5, 3])
plt.show()


二、库基本绘图


Matplotlib 绘图默认有一个画布,所有的绘图设置及操作是对同一个画布进行的,多次plot()会产生覆盖


1、绘图函数:plot()

函数原型:

plt.plot(x, y, format_string, **kwargs)

参数:

  • x:X轴数据,列表或数组,可选
  • y:Y轴数据,列表或数组,如果没有给定x,则默认 x 轴的值为对应的 y 的下标
  • format_string:控制曲线的格式字符串,可选
  • **kwargs:多组的(x, y, format_string),绘制多条曲线,各条曲线的x不能省略

format_string: 由颜色字符、风格字符和标记字符组成,可自由组合

颜色字符 说明
‘b’ 蓝色
‘g’ 绿色
‘r’ 红色
‘c’ 青绿色
‘#008000’ RGB某颜色
‘m’ 洋红色magenta
‘y’ 黄色
‘k’ 黑色
‘w’ 白色
‘0.8’ 灰度值字符串
风格字符 说明
‘‐’ 实线
‘‐‐’ 破折线
‘‐.’ 点划线
‘:’ 虚线
’ ’ 无线条
标记字符 说明
‘.’ 点标记
‘,’ 像素标记(极小点)
‘o’ 实心圈标记
‘v’ 倒三角标记
‘^’ 上三角标记
‘>’ 右三角标记
‘<’ 左三角标记
‘1’ 下花三角标记
‘2’ 上花三角标记
‘3’ 左花三角标记
‘4’ 右花三角标记
‘s’ 实心方形标记
‘p’ 实心五角标记
‘*’ 星形标记
‘h’ 竖六边形标记
‘H’ 横六边形标记
‘+’ 十字标记
‘x’ x标记
‘D’ 菱形标记
‘d’ 瘦菱形标记
‘|’ 垂直线标记

示例:

import matplotlib.pyplot as plt
import numpy as npa = np.arange(10)
plt.plot(a, a*1.5, 'go-', a, a*2.5, 'rx:', a, a*3.5, '*', a, a*4.5, 'b-.')
plt.show()

2、坐标图格式控制

# 设置 x,y 轴范围
plt.axis([x轴左点,x轴右点,y轴下点,y轴上点])# 网格设置,True为显示网格,默认不显示
plt.grid(True)# 显示
plt.show()# 保存,PNG格式
plt.savefig('图片路径',dpi = 每英寸点数)

3、显示中文

全局设置: 修改 rcParams 字典

import matplotlibmatplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['font.size'] = 20
  • rcParams 属性
属性 说明
‘font.family’ 用于显示字体的名字
‘font.style’ 字体风格,正常’normal’或斜体’italic’
‘font.size’ 字体大小,整数字号或者’large’、‘x‐small’
  • 中文字体
中文字体 说明
‘SimHei’ 中文黑体
‘SimSun’ 中文宋体
‘Kaiti’ 中文楷体
‘LiSu’ 中文隶书
‘FangSong’ 中文仿宋
‘YouYuan’ 中文幼圆
‘STSong’ 华文宋体

局部设置: 每个需要绘制文字的函数中单独设置文字的相关属性

属性 说明
fontproperties 字体类型
fontsize 字体大小

4、文本显示

函数 说明
plt.xlabel(‘x轴标签’) 对X轴增加文本标签
plt.ylabel(‘y轴标签’) 对Y轴增加文本标签
plt.title(‘图名’) 对图形整体增加文本标签
plt.text(x坐标,y坐标,‘文字’) 在任意位置增加文本
plt.annotate() 在图形中增加带箭头的注解

plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict)

  • s:注解的字符串
  • xy:箭头坐标(x, y)
  • xytext:文字坐标(x, y)
  • arrowprops:箭头格式,字典

示例:

import matplotlib.pyplot as plt
import numpy as npa = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a))plt.xlabel('横轴:时间', fontproperties='SimHei', fontsize=20, color='red')
plt.ylabel('纵轴:振幅', fontproperties='SimHei', fontsize=20)
plt.title(r'正弦波$y=cos(2\pi x)$', fontproperties='SimHei', fontsize=20)
plt.annotate(r'$\mu=100$', xy=(2, 1), xytext=(3, 1.5), fontsize=15,arrowprops=dict(facecolor='black', shrink=0.1, width=2))plt.axis([-1, 6, -2, 2])
plt.grid(True)
plt.show()

5、绘图区域:划分子图

简单的绘图区域划分:

  • 一次只能选择一个子图,子图的编号从1开始
  • 可以重新划分区域,但是选择的子图不能与之前的有交集,否则会覆盖之前的
  • plt.subplot(nrows, ncols, plot_number)
    • nrows:分为几行
    • ncols:分为几列
    • plot_number:当前要绘制的子图号,从左到右从上到下编号
import matplotlib.pyplot as plt
import numpy as npa = np.arange(0.0, 5.0, 0.02)
# 第一个子图
plt.subplot(211)
plt.plot(a, np.cos(a))
# 第二个子图
plt.subplot(223)
plt.plot(a, np.sin(a))
# 第三个子图
plt.subplot(224)
plt.plot(a, a/5)plt.show()

复杂的绘图区域划分:

  • 划分绘图区域网格时,行列的编号都从0开始
  • 选择子图时,可以按多行多列区域选中
  • plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
    • GridSpec:网格的行列数,元组形式,(rows,cols)
    • CurSpec:选中子图的起始网格坐标,元组形式,(row, col)
    • colspan:子图的长,即列数
    • rowspan:子图的高,即行数
import matplotlib.pyplot as plt
import numpy as npa = np.arange(0.0, 5.0, 0.02)
# 第一个子图
plt.subplot2grid((2, 3), (0, 0), colspan=3)
plt.plot(a, np.cos(a))
plt.title('a')
# 第二个子图
plt.subplot2grid((2, 3), (1, 0), colspan=2)
plt.plot(a, np.sin(a))
plt.title('b')
# 第三个子图
plt.subplot2grid((2, 3), (1, 2))
plt.plot(a, a/5)
plt.title('c')
plt.show()

GridSpec 类:

  • 用于复杂的绘图区域划分,子图选择更方便
  • 采用切片的方法选择子图
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as gsg = gs.GridSpec(2, 3)
a = np.arange(0.0, 5.0, 0.02)# 第一个子图
ax1 = plt.subplot(g[0, :-1])
ax1.plot(a, np.cos(a))
# 第二个子图
ax2 = plt.subplot(g[0:2, 2])
ax2.plot(a, np.sin(a))
# 第三个子图
ax3 = plt.subplot(g[1, 0])
ax3.plot(a, a/5)plt.show()


三、面向对象绘图


Matplotlib绘图可以采用面向对象的方式,即可以创建(实例化)多个画布,分别对不同的画布进行操作,多一个画布可以多次 plot() 不会覆盖


1、创建新画布:plt.figure()

函数原型:

plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)[source]

参数:

  • num:整数或字符串,可选,默认值:无。画布的编号,如果未提供,将创建新图形,并且图形编号将自动递增。画布对象将此数字保存在 number 属性中。如果提供了num且存在该num的画布,返回对它的引用。如果此画布不存在,则创建并返回画布对象。如果num是一个字符串,则显示画布的窗口标题为 num。
  • figsize:整数元组,可选,默认值:无。单位为英寸。如果未提供,则默认为 rcParams[“figure.figsize”]= [6.4, 4.8]
  • dpi:整数,可选,默认值:无。画布的每英寸点数。如果未提供,则默认为 rcParams[“figure.dpi”]= 100
  • facecolor:背景颜色。如果未提供,则默认为白色 rcParams[“figure.facecolor”]= ‘w’
  • edgecolor:边框颜色。如果未提供,则默认为白色 rcParams[“figure.edgecolor”]= ‘w’。
  • frameon:bool,optional,默认值:True,如果为False,则禁止绘制图框
  • FigureClass:Figure的 子类,(可选)使用自定义Figure实例
  • clear:bool,可选,默认值:False,如果为True并且该图已经存在,那么它将被清除

返回:

  • 返回画布对象
  • 如果要创建许多画布,确保明确调用 plt.close() 释放未使用的画布,使pyplot可以正确清理内存
  • rcParams定义的默认值,可以在 matplotlibrc 文件中修改

示例:

import numpy as np
import matplotlib.pyplot as plta = np.arange(0, 5.0, 0.02)# 创建画布
fig1 = plt.figure(num='fig', figsize=(6, 4))
plt.plot(a, np.cos(a), c="red", label="cos")
plt.plot(a, np.sin(a), c="blue", label="sin")
# 设置图例的位置
plt.legend(loc="best")# 嵌入小图,位置为画布的比例
left, bottom, width, height = 0.2, 0.2, 0.2, 0.1
ax1 = fig1.add_axes([left, bottom, width, height])
ax1.plot(a, a)plt.show()


GOOD LUCK!


Python 数据分析与展示笔记3 -- Matplotlib 库基础相关推荐

  1. Python 数据分析与展示笔记4 -- Pandas 库基础

    Python 数据分析与展示笔记4 – Pandas 库基础 Python 数据分析与展示系列笔记是笔者学习.实践Python 数据分析与展示的相关笔记 课程链接: Python 数据分析与展示 参考 ...

  2. Python 数据分析与展示笔记2 -- 图像手绘效果

    Python 数据分析与展示笔记2 – 图像手绘效果 Python 数据分析与展示系列笔记是笔者学习.实践Python 数据分析与展示的相关笔记 课程链接: Python 数据分析与展示 参考文档: ...

  3. Python 数据分析与展示笔记(三)

    Python 数据分析与展示笔记(三) [Python数据分析与展示].MOOC. 北京理工大学 Pandas库Series类型(pandas库的一维数据类型) Numpy Pandas 基础数据类型 ...

  4. Python 数据分析与展示笔记1 -- Numpy 基础

    Python 数据分析与展示笔记1 – NumPy 基础 Python 数据分析与展示系列笔记是笔者学习.实践Python 数据分析与展示的相关笔记 课程链接: Python 数据分析与展示 参考文档 ...

  5. Python数据分析【1】:matplotlib库详细教程

    Python数据分析:matplotlib库详细教程 一.基本介绍 1. 数据分析 2. 环境安装 二.matplotlib 1. 基本介绍 2. 基本要点 3. 散点图/直方图/柱状图 4. 画图工 ...

  6. Python数据分析三剑客学习笔记Day6——matplotlib包的使用:数据可视化,简单绘制柱状图、曲线图、饼图、频率分布直方图

    本文是视频Python数据分析三剑客 数学建模基础 numpy.pandas.matplotlib的学习笔记. -------------------------------------------- ...

  7. python数据可视化开发(1):Matplotlib库基础知识

    文章目录 前言 01.工具栏组件 02.图表数据 03.设置字体字典 全局字体样式 常用中文字体对应名称 查询当前系统所有字体 04.图像配置实例 配置格式 参数说明 官方文档:[matplotlib ...

  8. Python数据分析与展示 第一章 Numpy库入门

    数据的维度 维度:一组数据的组织形式 一维数据 一维数据由对等关系的有序或无序数据构成,采用线性方式组织 3.1413, 3.1398, 3.1404, 3.1401, 3.1349, 3.1376 ...

  9. 【python数据分析(24)】Matplotlib库基本图形绘制(1)(线形图、柱状图、堆叠图、面积图、填图、饼图)

    0. 前期准备: 导入三个必备的库,推荐使用jupyter notebook或者spyder编程环境 import numpy as npimport pandas as pdimport matpl ...

最新文章

  1. 网易实战分享|Docker文件系统实战
  2. Oracle绝对值函数
  3. 《textanalytics》课程简单总结(1):两种word relations——Paradigmatic vs. Syntagmatic...
  4. 华为鸿蒙一再延期,华为P50再次延期,鸿蒙系统正式版加持,有望与新平板一同登场...
  5. C和指针之字符串编程练习10(判断字符串是否是回文数)
  6. Bootstrap3 过渡插件
  7. tar打包/解包用法
  8. python-3高级特征
  9. linux下c编程常识
  10. k3 审核流程图_金蝶K3操作流程图详解(doc 64页)
  11. IO编程 之 缓冲篇
  12. 【私有云平台的搭建——vSphere Client 的安装与配置】
  13. oracle赋权directory,ORACLE DIRECTORY目录管理步骤
  14. python统计一个字符串中连在一起数字的个数.(如12asd25asfd,输出结果为2)
  15. iphone 中的大小和像素问题
  16. SAP 银企直连 常用事务代码,表名,类名
  17. 学python后的感想_学习python的感想
  18. 一定要独立,一定要争气
  19. python计算多维向量空间夹角余弦值
  20. 2017年加密货币进入国际金融体系

热门文章

  1. 企业项目开发--企业中的项目架构以及多环境分配(2)
  2. mysql五种日期函数
  3. 剑指offer(三):从尾到头打印链表
  4. 后端时间转js时间,主要用于取倒计时
  5. 背景全透明 background: transparent
  6. SpringMVC 中xml 配置多数据源
  7. Luogu P1091 合唱队形
  8. jCryptoJS 、C#互通加密(MD5版)
  9. [原创]位运算符实现两个整数加法运算
  10. HDU 2473 Junk-Mail Filter(并查集的删除操作)