Matplotlib官方文档学习笔记 PART1-简介 C1-使用指南 (19-12-2 by-xie)

我是入门的新手,打算先学习一下python的三大库:numpy,matplotlib,pandas。打算先从官方文档开始学起。下面是matplotlib官方文档的教程部分,本文从第一部分介绍讲起:
本教程介绍了一些基本的用法模式和最佳实践,以帮助您开始使用Matplotlib。

第1章 使用指南(Usage Guide)

图的各部分(Parts of a Figure)

这幅图包括了绘图的所有要素。整张图称为figure,创建它很简单:

生成一个绘图窗口(figure)的方法:

fig1 = plt.figure()

注意区分 axes、axis、artist的概念:

  • axes是轴的集合,功能类似于subplot。
  • axis是具体的某个轴(x轴、y轴)
  • artist 如上图所示,可以指figure中的所有东西

Basically everything you can see on the figure is an artist (even the Figure, Axes, and Axis objects). This includes Text objects, Line2D objects, collection objects, Patch objects … (you get the idea).

绘图功能需要的参数类型(Types of inputs to plotting functions)

所有的绘图函数都需要np.array 或者 np.ma.masked_array来作为输入。
如果不是,则需要调用函数进行转换。

b = np.matrix([[1,2],[3,4]])
b_asarray = np.asarray(b)

区别 Matplotlib, pyplot 和 pylab

Matplotlib是指整个库 ,而 matplotlib.pyplot 是Matplotlib中的一个module.
pylab是一个很方便的模块,它同时把matplotlib.pyplot和numpy搬运到了同一个命名空间(namespace)里。pylab已过时,并且由于命名空间污染而强烈不建议使用pylab。使用pyplot代替。

编码风格(Coding Styles)

对于pyplot样式,脚本顶部的导入通常为:

import matplotlib.pyplot as plt
import numpy as np

然后调用函数,例如,np.arange,np.zeros,np.pi,plt.figure,plt.plot,plt.show等。使用pyplot接口创建图形,然后使用对象方法进行其余操作:

x = np.arange(0, 10, 0.2)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

绘出的图形如下:

如果你要为不同的数据集一次次绘制相同的图,那么可以使用下面这个函数:

def my_plotter(ax, data1, data2, param_dict):
    """
    Parameters
    ----------
    ax : Axes
        The axes to draw to
		(需要画的图)
    data1 : array
       The x data
       
    data2 : array
       The y data

    param_dict : dict
       Dictionary of kwargs to pass to ax.plot
	   一些字典类型的参数去配置ax.plot()
    Returns
    -------
    out : list
        list of artists added
    """
    out = ax.plot(data1, data2, **param_dict)
    return out

# which you would then use as:

data1, data2, data3, data4 = np.random.randn(4, 100)
fig, ax = plt.subplots(1, 1)
my_plotter(ax, data1, data2, {'marker': 'x'})


如果想拥有两个子图:

 fig,(ax1 , ax2 ) = plt.subplot(1 , 2 )
 my_plotter (ax1 , data1 , data2 , {'maker':'x'} )
 my_plotter (ax2 , data3 , data4 , {'maker':'o'} ) 

后端(backends)

交互式与非交互式(interactive mode)

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

import matplotlib.pyplot as plt
plt.ion()
plt.plot([1.6, 2.7])

例如同样运行下面的代码,如果是交互模式,则会实时显示图像,如果是非交互模式,则不会发生任何事,除非加上plt.show()

性能(Performance)

线段简化(Line segment simplification)

对于具有线段的图(例如,典型的线图,多边形的轮廓等),可以通过文件中的path.simplify和 path.simplify_threshold参数 控制渲染性能。
该path.simplify参数是一个布尔值,指示是否完全简化了线段。
该 path.simplify_threshold参数控制简化的线段数量。阈值越高,渲染越快。

以下脚本将首先显示数据而不进行任何简化,然后以简化方式显示相同的数据。尝试与他们两个进行交互:

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

# Setup, and create the data to plot
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()

标记简化(Marker simplification)
标记简化仅适用于Line2D对象(通过 markevery属性)。

plt.plot(x, y, markevery=10)

将行分成较小的块(Splitting lines into smaller chunks)
如果使用的是Agg后端则可以使用agg.path.chunksizerc参数。这使您可以指定块的大小,任何大于多个顶点的线都将被拆分为多条线,每条线的agg.path.chunksize 顶点数不超过多个。(除非agg.path.chunksize为零,否则将不进行分块。)对于某些类型的数据,将行分块为合理的大小可以大大减少渲染时间。

以下脚本将首先显示没有任何块大小限制的数据,然后显示块大小为10,000的相同数据。当数字很大时,最好看到这种差异,请尝试最大化GUI并与之交互:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['path.simplify_threshold'] = 1.0

# Setup, and create the data to plot
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['agg.path.chunksize'] = 0
plt.plot(y)
plt.show()

mpl.rcParams['agg.path.chunksize'] = 10000
plt.plot(y)
plt.show()

图例(legends)

轴的默认图例行为会尝试查找覆盖最少数据点(loc=‘best’)的位置。如果有很多数据点,这可能是非常昂贵的计算。在这种情况下,你可能需要提供一个特定的位置。
使用fast样式
该fast样式可用于自动设置简化和拆分参数合理设置,以加快绘制大量的数据。只需运行以下命令即可使用它:

import matplotlib.style as mplstyle
mplstyle.use('fast')

它的重量很轻,因此可以与其他样式很好地配合,只要确保最后应用快速样式即可,这样其他样式就不会覆盖设置:

mplstyle.use(['dark_background', 'ggplot', 'fast'])

可以参考一下这篇博客理解:浅谈在matplotlib中更改plt.plot()的绘图风格

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值