matplotlib学习

此文章为我在AI学习当中数据可视化时用到matplotlib所出现的问题进行记录。参考matplotlib中文教程:https://www.matplotlib.org.cn/tutorials/

1. 使用指南

  1. 基本概念
    figure:绘图的整个窗口(可能包含多个axes)
    axes:绘图中的每个子图(可以理解为一个坐标系中的图构成一个axes)
    axis:axes中的横纵坐标轴(二维情况下),若为3维以上,类推

  2. 交互式与非交互式
    交互式可以输入一行命令之后,实时的绘制图像。而非交互式需要设置完图像参数后,输入plt.show()才将图像绘制出来。
    开启交互式图像绘制的命令为plt.ion(),关闭的命令为plt.ioff()。

  3. 性能
    (1)线段简化:对于具有直线段的打印(例如,典型的直线打印、多边形轮廓等),渲染性能可以由matplotLibrc文件中的path.Simplify和path.Simplify_Threshold参数控制。path.Simplify_Threshold参数控制简化线段的程度;阈值越高,渲染速度越快。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

y = np.random.rand(100000)
y[50000:] *= 2
y[np.logspace(1, np.log10(50000), 400).astype(int)] = -1
mpl.rcParams['path.simplify'] = True	

设置不同阈值来渲染图像

mpl.rcParams['path.simplify_threshold'] = 0.0
plt.plot(y)
plt.show()

mpl.rcParams['path.simplify_threshold'] = 1.0
plt.plot(y)
plt.show()

渲染时明显感觉path.simplify_threshold设置为1的比设置为0的渲染速度要快。

2. pyplot教程

2.1 pyplot简介

pyplot是绘图中的主要状态控制函数。他在图像绘制过程中设置坐标轴文字、标题文字、横纵坐标刻度等,并最终绘制图像。通过代码是理解它的最好途径!

import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()

  可以看到上述代码是作为axes对象进行相关方法的调用(说简单点,其实就是针对单个图设置数据、属性并显示)。这里需要注意:如果为plot()命令提供单个列表或数组,则matplotlib假定它是一系列y值,并自动为你生成x值。由于python范围以0开头,因此默认的x向量与y具有相同的长度,但从0开始。因此x数据为 [0,1,2,3]。
在这里插入图片描述
plot() 是一个多功能命令,将采用任意数量的参数。 例如,要绘制x与y的关系,可以发出命令:

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

此时第一个列表代表x取值范围,第二个列表代表y取值范围(x和y需要一一对应,即x列表维度需要与y列表维度相同)
在这里插入图片描述

2.2 格式化绘图的样式

  对于每对x、y参数,plot函数还有第三个可选参数,用来指示绘图的颜色和线型的格式字符串。格式字符串的字母和符号来自MATLAB,你可以将颜色字符串与线型字符串连接起来。例如下面的“ro”代表红色(red)圆圈(o)。默认格式字符串为“b-”,为蓝色实线。
  下述代码中axis是设置x轴与y轴坐标的方法。axis([0, 6, 0, 20])代表[xmin, xmax, ymin, ymax]。如果想绘制特殊线型和使用五彩缤纷的颜色就去查阅plot()文档吧!

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

在这里插入图片描述
plot()函数也可以同时在一个坐标系绘制多个图像:

import numpy as np

t = np.arange(0., 5., 0.2)
# red dashes, blue squares and green triangles
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()

在这里插入图片描述

2.3 使用关键字字符串绘图
data = {'a': np.arange(50),
        'c': np.random.randint(0, 50, 50),
        'd': np.random.randn(50)}
data['b'] = data['a'] + 10 * np.random.randn(50)
data['d'] = np.abs(data['d']) * 100

plt.scatter('a', 'b', c='c', s='d', data=data)
plt.xlabel('entry a')
plt.ylabel('entry b')
plt.show()

上述data字典中的’a’对应的列表元素值为0到49(50个);'c’对应的值为50个随机的0到50之间的整数;'d’对应的值为50个随机的服从正态分布的样本值。

numpy.random.randn(d0, d1, …, dn): 生成一个浮点数或N维浮点数组,取数范围:正态分布的随机样本数。

scatter()为绘制散点图的函数,其中’a’,'b’分别代表x和y的元素数组;c代表颜色;s代表散点图每个点的大小,后面引入data=data代表数据来源(以便可以引dict中的key作为函数的输入变量)。
在这里插入图片描述
在我修改了scatter函数中变量s=2后:
在这里插入图片描述在这里插入图片描述

2.4 用分类变量绘图
names = [1, 2, 3]
values = [1, 10, 100]

plt.figure(1, figsize=(9, 3))

plt.subplot(131)
plt.bar(names, values)
plt.subplot(132)
plt.scatter(names, values)
plt.subplot(133)
plt.plot(names, values)
plt.suptitle('Categorical Plotting')
plt.show()

这里names数组中使用字符串类型的元素是不行的,在bar()、scatter()、plot()方法中不接受数字外的类型。
在这里插入图片描述

2.5 控制线的属性
2.6 使用多个图形和轴
def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.figure(1)		# 默认语句
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')		# 生成蓝色散点以及连续黑线

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

在这里插入图片描述
subplot()命令指定numrows, numcols, plot_number,其中 plot_number 的范围 从1到numrows*numcols。如果 numrows * numcols <10,则subplot命令中的逗号是可选的。因此 subplot(211) 与 subplot(2, 1, 1) 相同。

  使用 clf() 清除当前图形,使用 cla() 清除当前轴。在用 close() 显式关闭数字之前,数字所需的内存不会完全释放。删除对图的所有引用,使用窗口管理器来关闭屏幕上出现图形的窗口是不够的,因为pyplot会保持内部引用,直到调用close()。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值