Python模块之Matplotlib

Matplotlib

官方文档: https://matplotlib.org/stable/tutorials/index.html

seaborn: 基于Matplotlib的高层绘图库

import matplotlib.pyplot as plt

三层结构

  1. 容器层

    1. Canvas:画布
    2. Figure:图
    3. Axes:坐标系,绘图区

    特点:

    • 一个figure(画布)可以包含多个axes(坐标系/绘图区),但是一个axes只能属于一个figure。
    • 一个axes(坐标系/绘图区)可以包含多个axis(坐标轴),包含两个即为2d坐标系,3个即为3d坐标系
  2. 辅助显示层

Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)

  1. 图像层

    Axes内通过plot、scatter、bar、histogram、pie等函数根据数据绘制出的图像。

基础绘图

  • plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class ‘matplotlib.figure.Figure’>, clear=False, **kwargs

    • 创建画布, 返回figure对象
    • num: 编号
    • figsize: 大小.默认是(6.4, 4.8)
    • dpi: 分辨率.默认是100
    • facecolor: 背景颜色. 默认是w 白色
    • edgecolor: 边框颜色.默认是w 白色
    • frameon: 边框. False 不绘制边框
    • clear: 清除
  • plt.savefig(fname, dpi=None, facecolor=‘w’, edgecolor=‘w’,
    orientation=‘portrait’, papertype=None, format=None,
    transparent=False, bbox_inches=None, pad_inches=0.1,
    frameon=None, metadata=None)

    • 保存图片到指定路径
    • plt.show()会释放figure资源, 必须在show之前保存
  • plt.show()

    • 显示图片
  • plt.xticks(ticks=None, labels=None, **kwargs)

    • 获取或设置x轴的当前刻度
    # 设置刻度和标签
    plt.xticks(np.arange(0, 1, step=0.2))
    # 获取刻度和标签
    locs, labels = plt.xticks()
    
  • plt.yticks()

    • 获取或设置y轴的当前刻度
  • plt.xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)

    • 设置x轴的标签
  • plt.ylabel(xlabel, fontdict=None, labelpad=None, **kwargs)

    • 设置y轴的标签
  • plt.title(label, fontdict=None, loc=‘center’, pad=None, **kwargs)

  • plt.legend(*args, **kwargs)

    • 设置图例
    • lables: 可传图例名称 单个字符串或字符串列表
    • fontsize: 字体大小
    • frameon=False
    • loc: 图例位置. best 自动选择最好的位置
    Location StringLocation Code
    ‘best’0
    ‘upper right’1
    ‘upper left’2
    ‘lower left’3
    ‘lower right’4
    ‘right’5
    ‘center left’6
    ‘center right’7
    ‘lower center’8
    ‘upper center’9
    ‘center’10
  • plt.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

    • 显示图像
    • x,y: x/y值, 类数组/标量
    • fmt\ 定义参数的快捷方法,包括颜色color/线型linestyle/标记marker
    • 与fmt冲突时,关键字参数优先
    # 效果相同
    plot(x, y, 'go--')
    plot(x, y, color='green', marker='o', linestyle='--')
    
    • data: 可索引对象. 需要一并选择标签名称在对应的x/y轴绘制
  • plt.xlim / ylim()

    • 设置 或者 获取 x/y轴的取值范围
    • bottom, top = ylim() # 获取y轴的取值范围
    • ylim((bottom, top)) # 设置y轴的取值范围(bottom, top)
    • ylim(bottom, top) # 设置y轴的取值范围(bottom, top)
  • plt.grid(True, color=‘k’, linewidth=1, linestyle=’–’, alpha=.5)

    • 设置网格 线型 线宽 颜色 透明度

子图

  • plt.subplot(nrows, ncols, index, **kwargs)
    • 添加子图 整个画图区域被分割为nrows x ncols 个, index表示第几个区域
    • 如 plt.subplot(311) 表示 分割成3x1个区域 在第1个区域添加子图
    • shareX, shareY 共享x/y轴
  • plt.suptitle()
    • 为子图添加总图标题
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签  
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

t1 = np.arange(0, 5, 0.1)
t2 = np.arange(0, 5, 0.02)

plt.figure(figsize=(12, 8), dpi=80)
plt.subplot(221)
plt.plot(t1, np.exp(-t1) * np.cos(2 * np.pi * t1),'r--')

plt.subplot(222)
plt.plot(t2, np.cos(2 * np.pi * t2), 'r--')

# 整体来看是2行1列中的第2个位置
plt.subplot(212)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

plt.suptitle('子图展示', fontsize=12, color='k')

plt.show()

子图总标题

  • plt.subplots_adjuest()
    • 子图间距的调整
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签  
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

# 生成固定随机数组
np.random.seed(0)
# 生成随机漫步数据
data = np.random.randn(100).cumsum()
fig, axes = plt.subplots(2, 2, sharex=True, sharey=True, figsize=(14, 8))
# 通过axes的索引定位绘制图片
axes[0, 0].plot(data)
axes[0, 1].bar(range(len(data)), data, color='k', alpha=0.5)
axes[1, 0].scatter(range(len(data)), data)
axes[1, 1].plot(data, 'c>--')
# 调节子图直接的距离
plt.subplots_adjust(wspace=0, hspace=0)
plt.grid(True, color='k', linewidth=1, linestyle='--', alpha=.5)
plt.show()

共享x/y轴

  • plt.subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)
    • shape:网格的尺寸
    • loc:绘制子图位置
    • rowspan:轴向下跨距的列数。
    • colspan:轴向右跨距的行数
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签  
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

x= np.linspace(0,2)
plt.figure(figsize=(12,8))

#在2行3列的表格中,第一行第一列的位置绘制一个轴向右跨距为3的子图
plt.subplot2grid((2,3) ,(0, 0), colspan=3)
plt.title("第一幅子图")
plt.plot(x, x)

#在2行3列的表格中,第2行第1列的位置绘制一个子图
plt.subplot2grid((2,3), (1, 0))
plt.title("第二幅子图")
plt.plot(x, x ** 2)

plt.subplot2grid((2,3) ,(1, 1), colspan=2)
plt.title("第三幅子图")
plt.plot(x, x ** 3)

自定义子图网格布局

  • plt.subplot_tool
    • 调整子图的图像, 生成子图工具窗口
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(19680801)
fig, axs = plt.subplots(2, 2, figsize=(12, 8))
axs[0, 0].imshow(np.random.random((100, 100)))
axs[0, 1].imshow(np.random.random((100, 100)))
axs[1, 0].imshow(np.random.random((100, 100)))
axs[1, 1].imshow(np.random.random((100, 100)))


# 使用subplot_tool函数创建工具
plt.subplot_tool()
plt.show()

子图工具窗口

其他

  • 希腊字母表示法 r’${希腊字母名称}$’ 如: α 的写法r’$\alpha$'
    希腊字母表
  • 在同一坐标系当中的不同图形, 多次plot即可

折线图

# 数据
import  matplotlib.pyplot as plt
import range
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签  
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

x = range(60)
y_sh = [random.uniform(15, 18) for _ in x]
y_bj = [random.uniform(1, 3) for _ in x]
# 画布
plt.figure(figsize=(20, 8), dpi=80)
# 显示
plt.plot(x, y_sh)
# 坐标轴刻度
plt.xticks(x[::5], [f'11点{i}分' for i in x][::5])
plt.yticks(range(40)[::5])
# 网格
plt.grid(True, linestyle='--', alpha=.5)
# 描述
plt.xlabel('时间')
plt.ylabel('温度')
plt.title("中午11点0分到12点之间的温度变化图示")
plt.legend(labels=['上海', '北京'], frameon=False, loc="upper right", fontsize=14)

折线图1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值