Matplotlib使用(1)

Matplotlib 是Python编程语言的一个绘图库及其数值数学扩展 NumPy。它为利用通用的图形用户界面工具包,如Tkinter, wxPython, Qt或GTK+向应用程序嵌入式绘图提供了面向对象的应用程序接口。

fig, ax = plt.subplots() ax.plot([1, 2, 3, 4], [1, 4, 2, 3])

Matplotlib在Figures(窗口)上绘制数据图,每个数据可以包含一个或多个Axes(即,可以根据xy坐标(或极坐标图中的ther-r)指定点的区域) ,或3D图中的xyz等)。使用轴创建图形的最简单方法是使用,pyplot.subplots然后我们可以 Axes.plot在轴上绘制一些数据:


matlab中不用画轴,就像这样

Matlab

m里面也有相似得用法,

接下来看看图形要素

Figure

在整个figure。Figure跟踪所有子Axes,少量“特殊”artists(标题,人物传说等)和画布。(不必太担心画布,这是至关重要的,因为它实际上是绘制对象来获得绘图的对象,但作为用户,您几乎看不见它)。一个图形可以包含任意数量的Axes,但通常至少包含一个。(机翻,有点鬼畜)

创建新图形的最简单方法是使用pyplot:

fig = plt.figure() # an empty figure with no Axes
fig, ax = plt.subplots() # a figure with a single Axes
fig, axs = plt.subplots(2, 2) # a figure with a 2x2 grid of Axes

将轴与图形一起创建很方便,但是以后也可以添加轴,以实现更复杂的轴布局。

Axes

这就是您认为的“绘图”,它是具有数据空间的图像区域。一个给定的图形可以包含许多Axes,但是一个给定的Axes 对象只能位于一个Figure。轴包含两个(或3D情况下为三个) Axis对象(注意轴和Axis之间的差异),这些对象负责数据限制(也可以通过axes.Axes.set_xlim()和 axes.Axes.set_ylim()方法控制数据限制)。每个Axes都有一个标题(通过设置set_title()),一个x标签(通过设置set_xlabel())和一个y 标签(通过 设置 set_ylabel())。

的Axes类和它的成员函数是主要的入口点与OO接口工作。

Axis

这些是类似数字线的对象。他们负责设置图形限制并生成刻度(轴上的标记)和刻度标签(标记刻度的字符串)。刻度的位置由Locator对象确定,刻度标签字符串由格式化Formatter。正确Locator和正确的组合可以Formatter很好地控制刻度线的位置和标签。

Artist¶

基本上你可以在图中看到的一切是一个艺术家(甚至 Figure,Axes和Axis对象)。这包括 Text对象,Line2D对象,collections对象,Patch 对象...(您明白了)。绘制图形后,所有艺术家都被绘制到画布上。大多数艺术家都被绑在斧头上。这样的艺术家不能被多个轴共享,也不能从一个轴移动到另一个轴。

使用Matplotlib本质上有两种方法:

显式创建图形和轴,并在其上调用方法(“面向对象(OO)样式”)。

依靠pyplot自动创建和管理图形和轴,并使用pyplot函数进行绘图。

所以可以做到(OO风格)

代码不一样,结果一样,体现了,图包在大方向上绘图得两种方法

对于一些经常要绘制得图,可以考虑函数得方法就像这样:

一旦图形很复杂,这种方法是个不错的选择

性能

无论是以交互方式浏览数据还是以编程方式保存大量绘图,渲染性能都可能成为绘图中的一个痛苦瓶颈。Matplotlib提供了几种方法,以稍微改变绘制外观(达到可设置的公差)为代价,大大减少了渲染时间。减少渲染时间的可用方法取决于所创建绘图的类型。

线段简化

对于具有线段的图(例如,典型的线图,多边形的轮廓等),可以通过文件中的path.simplify和 path.simplify_threshold参数 来控制渲染性能matplotlibrc。该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()

Matplotlib当前默认为的简化阈值1/9。如果要更改默认设置以使用其他值,则可以更改matplotlibrc 文件。另外,您可以创建一种新样式(用于最大程度简化)进行交互式绘图,并创建另一种样式(用于最小程度进行简化)的出版物质量绘图,并根据需要激活它们。

通过将线段迭代合并为单个矢量,直到下一个线段到矢量的垂直距离(在显示坐标空间中测量)大于该path.simplify_threshold参数,可以简化此工作。

标记简化

标记也可以简化,尽管不如线段健壮。标记简化仅适用于Line2D对象(通过 markevery属性)。无论在哪里 Line2D传递构造参数(例如 matplotlib.pyplot.plot()和) matplotlib.axes.Axes.plot()markevery 都可以使用该参数:

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

markevery参数允许进行简单的二次采样,或尝试均匀间隔(沿x轴)采样。

将行分成较小的块

什么是后端,就是把你得code翻译出来显示在屏幕上面

如果使用的是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()

与上面得图一样,但是绘制时间在主观上面确实可以感觉到了差异

传说

轴的默认图例行为会尝试查找覆盖最少数据点(loc='best')的位置。如果有很多数据点,这可能是非常昂贵的计算。在这种情况下,您可能需要提供一个特定的位置。

使用快速样式

快速样式可用于自动设置简化和拆分参数合理设置,以加快绘制大量的数据。只需运行以下命令即可使用它:

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

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

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

求关注,求转发

(0)

相关推荐

  • 如何使用Celluoid制作可视化动画

    Celluoid可以简化matplotlib生成可视化动画的代码量,Celluoid会先生成一个画布,然后每隔一段时间对绘图进行拍照(帧),最后将所有的帧合并. 今天讲三个例子 单图 多图 图例 安装 ...

  • 三维散点图

    上篇主要介绍了s,c,marker参数,scatter函数还有其他的参数,比如: 1.alpha,表示透明程序,取值 0(透明)和1(不透明)之间,默认值:1. 2.edgecolors,表示边缘颜色 ...

  • 纯干货:手把手教你用Python做数据可视化(附代码)

    作者:Wes McKinney本文摘编自<利用Python进行数据分析>第2版matplotlib是一个用于生成出版级质量图表(通常是二维的)的桌面绘图包.该项目由John Hunter于 ...

  • matplotlib pyplot 画图基础教程

    用Python绘制图表在工作中是一项非常有用的技能,虽然说强大的matlab基本可以满足我们所有的绘图需求,但是在有些情况下,使用Python绘图,让图表直接可以直接随着Python程序的运行而产生. ...

  • 数据分析最有用的25个 Matplotlib图

    摸鱼吧算法工程师 一名在职的算法工程师老学姐. 1篇原创内容 公众号 点击上方"摸鱼吧算法工程师"卡片,关注星标 获取有趣.好玩的前沿干货! 作者:zsx_yiyiyi 编辑:py ...

  • 数据分析之Matplotlib(六)饼图(pie)

    饼图介绍 饼图广泛得应用在各个领域,用于表示不同分类的占比情况,通过弧度大小来对比各种分类.饼图通过将一个圆饼按照分类的占比划分成多个区块,整个圆饼代表数据的总量,每个区块(圆弧)表示该分类占总体的比 ...

  • 太强了,用 Matplotlib Imageio 制作动画!

    通常大家做出来的图表,绝大部分都是静态的,有时会显得不够吸引人. 今天就给大家介绍一下,如何用Python绘制动态图表. 主要是使用到Matplotlib+imageio,其中Matplotlib就有 ...

  • 你论文PPT的图都太秀!Matplotlib 使用最全小抄

    来源:GitHub科技 今天给大家分享一位GitHub大神制作的Matplotlib cheat sheet,直接看图⬇️ 那么我们来看看这张图里到底藏了哪些宝贝. 01 图形类型 02 图例配置 0 ...

  • Python | 数据分析最有用的25个 Matplotlib图

    人工智能算法与Python大数据 致力于提供深度学习.机器学习.人工智能干货文章,为AI人员提供学习路线以及前沿资讯 23篇原创内容 公众号 点上方人工智能算法与Python大数据获取更多干货 在右上 ...

  • 如何设置matplotlib中x,y坐标轴的位置?

    在机器学习中经常会使用Sigmoid函数,如果直接使用matplotlib绘图,那么就会像下图这样,原点并没有在(0,0). import matplotlib.pyplot as plt impor ...

  • Matplotlib 最具价值的50个可视化项目

    背景描述 Matplotlib是Python的一个常用的科学制图模块,Matplotlib 最具价值的50个可视化项目是一份很好的学习材料,相关数据文件如下. 数据说明 一共有14个表格数据,都是cs ...

  • Matplotlib 最具价值的50个可视化项目(转载)

    本文总结了 Matplotlib 以及 Seaborn 用的最多的50个图形,掌握这些图形的绘制,对于数据分析的可视化有莫大的作用,强烈推荐大家阅读后续内容. 来源:https://www.machi ...

  • Top 50 matplotlib Visualizations

    A compilation of the Top 50 matplotlib plots most useful in data analysis and visualization. This li ...