Matplotlib精品学习笔记002-Pyplot详解,快速绘图

news2024/9/30 7:30:07

Matplotlib精品学习笔记002-Pyplot详解,

matplotlib.pyplot集合了一系列功能,运行起来和MATLAB相似。
每个pyplot功能都会对画布(figure)进行修改:包括创建画布,在画布上创建一个画图区,向画图区里绘制一些线条,给画图区挂上标签等等。
在matplotlib.pyplot中,调用函数会保存不同的声明,因此pyplot会始终追踪锁定当前画布和当前画图区,绘画函数会直接作用于当前轴区(axes)。这也是隐式接口的特性

==pyplot(隐式)API虽然更简洁,但不如显式API灵活。==有兴趣可以阅读matplotlib显式接口与隐式接口

通过pyplot快速绘图

import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()
  • 知识点: 如果向plot()传入一个列表或数组(array),matplotlib会默认是y数据,并自动生成x数据,也就是x=range(len(array)),x数据从0开始。

定义画图区的样式(plot style)

对于每对x,y参数,都有一个可选参数,它可以通过格式化字符串规定画图区的颜色和线条样式。格式化字符串的字母和符号都来自MATLAB。颜色字符串+线条样式字符串。

  • 知识点: 默认格式化是’b-',表示蓝色线条。
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro') 
# 样式为红色的点
plt.axis([0, 6, 0, 20])
plt.show()
  • 知识点: 上方代码块中的plt.axis()函数接受[xmin, xmax, ymin, ymax]这样的列表,能规定轴区(axes)的视野。

如果matplotlib只能读取列表,那可以说是毫无用处

比起列表,更常见的是使用numpy的array。

知识点: matplotlib都会在内部将接收到的数据转换为numpy的array类型。

简单了解一下matplotlib如何使用numpy绘图:

import numpy as np

# 从0-5,每隔0.2取数
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()

利用实参传入键对值字符串绘图

matplotlib允许通过实参data传入numpy.recarray和pandas.DataFrame等对象。之后,你就可以通过字符串获取对应的变量值来绘图。
例如:

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()

也可以使用分类变量创建一个图表。Matplotlib允许您将分类变量直接传递给许多绘图函数。

names = ['group_a', 'group_b', 'group_c']
values = [1, 10, 100]

plt.figure(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()

自定义线条属性

线条自带许多属性。你可以对线宽、线条样式、平滑等属性设定。设定属性的方法不止一种。

使用关键字参数(keyword argument):

plt.plot(x, y, linewidth=2.0)

使用Line2D实例的属性设置方法。

plot(绘图)将返回一个包含Line2D实例的列表,比如:line1, line2 = plot(x1, y1, x2, y2)。我们就可以针对线条实例进行属性设置。

line, = plt.plot(x, y, '-')
line.set_antialiased(False) # 关闭平滑

通过setp。

下面的例子将展示利用MATLAB风格的函数对若干线条设置多项属性。你既可以使用python的关键字参数,也可以使用MATLAB风格的字符串/值对。

lines = plt.plot(x1, y1, x2, y2)
# 使用关键字参数
plt.setp(lines, color='r', linewidth=2.0)
# MATLAB风格
plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

Line2D实例的属性表

属性名称值类型
alpha透明度浮点数
animated动图True or False
antialiased or aa平滑True or False
clip_box夹框matplotlib.transform.Bbox实例
clip_on夹框显示True or False
clip_path夹框路径Path实例和Transform实例,Patch
color或c 颜色任意matplotlib可识别的颜色
contains命中测试函数
dash_capstyle虚线顶部样式‘butt’, ‘round’, ‘projecting’
dash_joinstyle‘miter’, ‘round’, ‘bevel’
dashes虚线点是否连续
data数据(np.array xdata, np.array ydata)
figure图形matplotlib.figure.Figure实例
lable标签字符串
linestyle或ls线条样式[ ‘-’
linewidth或lw线条宽度浮点数
marker标记[ ‘+’
markeredgecolor或mec标记边缘颜色任意matplotlib可识别的颜色
markeredgewidth或mew标记边缘宽度浮点数
markerfacecolor或mfc标记颜色任意matplotlib可识别的颜色
markersize或ms标记大小浮点数
markevery[ None
picker选择用于线条选择交互
pickradius选择半径线条选择的半径
solid_capstyle[‘butt’
solid_joinstyle[‘miter’
transform变型matplotlib.transforms.Transform实例
visible可视True or False
xdata横轴数据np.array
ydata竖轴数据np.array
zorderZ轴任意数字

要获取已绘制线条的属性,可以通过调用setp函数,以线条为参数:

lines = plt.plot([1, 2, 3])
plt.setp(lines)

操作多个画布和轴区(figures and axes)

MATLAB和pyplot都会定位当前画布和当前轴区。因此所有的绘图函数都会作用于当前轴区。gca函数返回当前轴区,即一个matplotlib.axes.Axes实例;而gcf函数返回当前画布,即一个matplotlib.figure.Figure实例。==通常,你不必担心是否在当前画布和轴区上绘图,因为matplotlib已经在内部完成了这项工作。
譬如:

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()
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()

plt.figure()可有可无,因为如果没有画布存在的话,matplotlib会自动创建一个;正如调用subplot()时如果没有轴区则会自动新建一个。subplot()需要三个参数:numrows, numcols, plot_number,其中plot_number的范围是1至numrows乘numcols。如果numrows*numcols<10,逗号也是可以忽略的。比如subplot(211)等价于subplot(2, 1, 1)。

matplotlib允许创建任意数量的subplots和axes。如果你想手动放置axes的位置,比如不想按照网格排列,使用axes([left, bottom, width, height])可以调整axes的位置,(这4个参数范围均从0至1)。

你可以多次调用figure()生成多个画布。每个画布随你所愿地可以包含数个轴区或subplots。

import matplotlib.pyplot as plt
plt.figure(1)                # 第一个 figure
plt.subplot(211)             # the first subplot in the first figure
plt.plot([1, 2, 3])
plt.subplot(212)             # the second subplot in the first figure
plt.plot([4, 5, 6])


plt.figure(2)                # 第二个 figure
plt.plot([4, 5, 6])          # creates a subplot() by default

plt.figure(1)                # first figure current;
                             # subplot(212) still current
plt.subplot(211)             # make subplot(211) in the first figure
                             # current
plt.title('Easy as 1, 2, 3') # subplot 211 title

可以用clf清空当前画布,用cla清空当前轴区。

注意: 当你绘制大量画布时,它们会占用内存,只有调用close函数后figure才会关闭。仅仅关掉画布的调用或不显示都不会清除内存占用。

操作文本(Text)

利用text可以往指定位置添加文本。 xlabel, ylabel 和 title会向特定位置添加文本。

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

# the histogram of the data
n, bins, patches = plt.hist(x, 50, density=True, facecolor='g', alpha=0.75)


plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

在这里插入图片描述

text函数会返回一个matplotlib.text.Text实例。可以通过关键字参数或setp函数改变它的属性。

t = plt.xlabel('my data', fontsize=14, color='red')

使用数学表达式

Matplotlib在任何文本表达式中接受TeX方程表达式。例如在标题中添加表达式,你可以用美元符号包围TeX表达式:

plt.title(r'$\sigma_i=15$')

标题字符串前面的r很重要——它表明该字符串是一个原始字符串,而不是将反斜杠视为python转义。
matplotlib有一个内置的TeX表达式解析器和布局引擎,并且提供了自己的数学字体。因此,您可以跨平台使用数学文本,而不需要安装TeX。对于那些安装了LaTeX和dvipng的人,你也可以使用LaTeX来格式化文本,并将输出直接合并到你的显示图形或保存的postscript中。

注释文本

使用上面的text函数将文本放置在轴上的任意位置。文本的一个常见用途是注释图形的某些特性,annotate方法提供了辅助功能,使注释变得容易。在注释中,有两点需要考虑:被注释的位置由参数xy表示,以及文本xytext的位置。这两个参数都是(x, y)元组。

ax = plt.subplot()

t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = plt.plot(t, s, lw=2)

plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
             arrowprops=dict(facecolor='black', shrink=0.05),
             )

plt.ylim(-2, 2)
plt.show()

在这里插入图片描述
在这个基本示例中,xy位置(箭头提示)和xytext位置(文本位置)都是数据坐标。

对数轴和其他非线性轴

matplotlib.pyplot不仅支持线性轴缩放,还支持对数和logit缩放。这通常用于数据跨越多个数量级。改变坐标轴的比例很简单:

plt.xscale('log')

下面是四个具有相同数据和不同y轴比例的图形的示例。

# Fixing random state for reproducibility
np.random.seed(19680801)

# make up some data in the open interval (0, 1)
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))

# plot with various axes scales
plt.figure()

# linear
plt.subplot(221)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')
plt.grid(True)

# log
plt.subplot(222)
plt.plot(x, y)
plt.yscale('log')
plt.title('log')
plt.grid(True)

# symmetric log
plt.subplot(223)
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthresh=0.01)
plt.title('symlog')
plt.grid(True)

# logit
plt.subplot(224)
plt.plot(x, y)
plt.yscale('logit')
plt.title('logit')
plt.grid(True)
# Adjust the subplot layout, because the logit one may take more space
# than usual, due to y-tick labels like "1 - 10^{-3}"
plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,
                    wspace=0.35)

plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JVM】垃圾回收器

垃圾回收器 Serial收集器 单线程&#xff0c;进行垃圾收集工作时必须暂停其他所有的工作线程。STW造成了不好的用户体验。 新生代采用复制算法&#xff0c;老年代采用标记整理算法。 Serial Old Serial 收集器的老年代版本&#xff0c;它同样是一个单线程收集器。它主要有两…

FairGuard-Windows加固工具版本更新日志

FairGuard-Windows加固工具1.2.2版本更新日志&#xff1a; ■ 增加Unity Resources资源加密的支持; ■ 增加单独Assetbundle资源加密&#xff0c;并同时支持压缩包和文件夹作为输入的方式; ■ 增加对游戏原文件夹加固的支持; Windows加固方案介绍 FairGuard专为游戏量身定…

IntelliJ IDEA 安装JRebel实现热部署详细版(亲测有效)

简介 JRebel可快速实现热部署&#xff0c;节省了大量重启时间&#xff0c;提高了个人开发效率。 JRebel是一款JVM插件&#xff0c;它使得Java代码修改后不用重启系统&#xff0c;立即生效。 安装JRebel 1.file–>setting–>plugins–>在Marketplace的搜索框输入JRe…

【记录问题】RuntimeError:working outside of application context. Flask使用SQLAlchemy数据库

前提&#xff1a;Flask使用SQLAlchemy数据库 本质&#xff1a;依赖包版本不匹配 问题1&#xff1a;报错RuntimeError&#xff1a;working outside of application context. 运行程序报错&#xff0c;如下错误&#xff1a; 原因&#xff1a;flask-sqlalchemy 版本过高导致&am…

试题 算法训练 自行车停放

问题描述 有n辆自行车依次来到停车棚&#xff0c;除了第一辆自行车外&#xff0c;每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或右边。(e.g.停车棚里已经有3辆自行车&#xff0c;从左到右编号为&#xff1a;3,5,1。现在编号为2的第4辆自行车要停在5号自行车的左…

python自学之《21天学通Python》(16)——第19章 用Pillow库处理图片

Pillow是Python2.X时代比较流行的Python ImagingLibrary&#xff08;简称Pillow&#xff09;图像处理库的分支&#xff0c;并修复了一些bug。Pillow提供了对Python3的支持&#xff0c;为Python3解释器提供了图像处理的功能。和Pillow库一样提供了广泛的文件格式支持、高效的内部…

IDEA如何创建一个springboot项目

要想进入springboot的殿堂&#xff0c;你的跨进springboot的门槛&#xff0c;下面就是使用IDEA初始话一个简单的springboot项目。 选择Create New Project 选择Spring Initializer——>选择对应的jdk版本——>Default默认在线构建&#xff0c;需要联网噢 选择自己想写…

2005-2019年我国地级市国内外旅游人数和收入数据

旅游产业的发展情况是一个城市经济和文化影响力的重要指标&#xff0c;我们在很多研究中都会用到旅游相关的数据&#xff0c;之前我们介绍过1978-2020年的中国旅游统计年鉴和2022年13604条的全国A级景区数据&#xff08;可以查看之前推送的文章&#xff09;。 本次我们为大家介…

上传文件-课后程序(JAVA基础案例教程-黑马程序员编著-第九章-课后作业)

【案例9-3】 客户端向服务端上传文件 【案例介绍】 1.案例描述 编写一个客户端向服务端上传文件的程序&#xff0c;要求使用TCP通信的的知识&#xff0c;将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。并把客户端的IP地址加上count标识作为上传后文件的文…

网络基础之IP地址和子网掩码

一、IP地址IP地址是IP协议提供的一种统一的地址格式&#xff0c;它为互联网上的每一个网络和每一台主机分配一个逻辑地址&#xff0c;以此来屏蔽物理地址的差异。习惯上&#xff0c;我们用分成四段的十进制数表示IP地址&#xff0c;从0.0.0.0 一直到255.255.255.255。互联网上的…

虚拟内存原理

局部性原理 计算机组成原理里我们可以知道cache掉入的数据都是连续的 我们可以看下面的例子&#xff0c;data创建的数组&#xff0c;因为我们要读入的是这个数组所以调入的是这一段内存的内容就大概率不会miss 但是我们要知道有些程序的代码被执行的几率是很小的&#xff0c;…

通达信KDJ抄底指标公式,利用J值小于0

前几天介绍了平滑KDJ指标公式&#xff0c;当时有人提出来不建议处理KDJ&#xff0c;KDJ的特点是灵敏&#xff0c;经过处理后就失去其意义了。不过我认为每种指标有相应的使用场景&#xff0c;不必拘泥于原始指标&#xff0c;指标也是人想出来的。今天就利用KDJ的灵敏&#xff0…

Windows下curl编译,使用vcpkg定制自己的【curl】。

本篇介绍在Windows下如何编译curl&#xff0c;curl自称是星球上最好用的计算机网络工具&#xff0c;但是它在windows上纯手动编译很困难&#xff0c;我们使用vcpkg来简化它的编译&#xff0c;方便我们使用。 目录 一、CURL介绍 二、vcpkg下载、编译、定制【curl】 三、编写…

代码随想录算法训练营第十五天 | 层序遍历 、226.翻转二叉树、101.对称二叉树

打卡第15天&#xff0c;今天继续二叉树 今日任务 层序遍历10道题226.翻转二叉树101.对称二叉树 层序遍历10道题 题单 102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个…

工作篇:触摸屏原理介绍

一、触摸屏概述 触摸屏作为一种新的输入设备&#xff0c;它是目前最简单、方便、自然的一种人机交互方式。 当接触了屏幕上的图形按钮时&#xff0c;屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置&#xff0c;可用以取代机械式的按钮面板&#xff0c;并借由液晶…

《PMBOK 指南第七版》初识

个人理解&#xff1a; 体系构建变化非常大&#xff0c;7版延续6版的内容&#xff0c;但对项目管理的视角完全不同&#xff0c;系统化的思考方式10知识领域 到 12管理原则的转变&#xff0c;突出了对变化的敏捷应对&#xff0c;体现管理的有效性5过程域 到 8 绩效域的转变&…

Android源码分析 - InputManagerService与触摸事件

0. 前言 有人问到&#xff1a;“通过TouchEvent&#xff0c;你可以获得到当前的触点&#xff0c;它更新的频率和屏幕刷新的频率一样吗&#xff1f;”。听到这个问题的时候我感到很诧异&#xff0c;我们知道Android是事件驱动机制的设计&#xff0c;可以从多种服务中通过IPC通信…

03 Android基础--fragment

03 Android基础--fragment什么是fragment&#xff1f;fragment生命周期&#xff1f;动态的fragment与静态的fragmentfragment常用的两个类与APIFragment与Activity通信什么是fragment&#xff1f; 碎片&#xff0c;一个activity中可以使用多个fragment&#xff0c;可以把activi…

应用模型开发指南上新介绍

Module、HAP、Ability、AbilitySta-ge、Context……您是否曾经被这些搞不懂又绕不开的知识点困扰&#xff1f; 现在&#xff0c;全新的《应用程序包基础知识》及《应用模型开发指南》为您答疑解惑&#xff01; 这里有您关注的概念解析、原理机制阐述&#xff0c;也有丰富的…

gitlab+idea回退代码并提交到新分支

目录结构前言idea创建新分支查看代码提交记录使用IntelliJ IDEA获取使用Git Bash Here获取代码回退到指定版本回退执行命令行使用IntelliJ IDEA实现使用Git Bash Here实现回退完成验证idea提交指定版本代码验证分支代码推动成功前言 IntelliJ IDEA GitLab开发过程中需将代码回…