前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >matplotlib基础手册:pyplot手册

matplotlib基础手册:pyplot手册

作者头像
bugsuse
发布于 2020-04-21 09:45:29
发布于 2020-04-21 09:45:29
2.7K00
代码可运行
举报
文章被收录于专栏:气象杂货铺气象杂货铺
运行总次数:0
代码可运行

matplotlib.pyplot 是一个函数集合,使 matplotlib 能够像 MATLAB 一样进行绘图。每一个 pyplot 函数都会改变 figure,比如创建figure,在figure中创建绘图区域,在绘图区域绘制线条,添加 labels 等。matplotlib.pyplot 的函数调用会记住当前的状态,从而更新 figure 和 绘图区域。而且 matplotlib.pyplot 是直接在当前 axes 进行绘图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()

你可能会疑惑,为什么x轴的范围是 0-3,而y轴的范围是 1-4呢?这是因为你只传递了一个列表给 plot 命令,plot命令假设这是 y 的值,并且为你自动产生了 x 的值与之匹配。由于 python 中是以 0 开始的,所以产生的 x 的值也是以 0 开始的,而且长度和 y 序列的长度相同。

你可以传递任何随机数据给 plot 命令,比如同时传入 x, y

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

对于每一个x,y 参数对都有一些可选参数用来设置 线形颜色。而且这种设置方式和 MATLAB 非常相似,而且你也可以将 线形 和 颜色 放在同一个字符串中,比如 'ro',默认值为 'b-'(即蓝色实线)。如果要绘制红色的圆,可以执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

此例中 axes 命令的参数是设置 轴视图 的 xy轴上下限。

当然 matplotlib 也可以和 MATLAB一样,一次绘制多条线

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0., 5., 0.2)

# 分别设置位红色虚线,蓝色正方形,绿色三角形
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()

控制线的属性

线有很多属性可以设置,比如 linewidth,dash style,antialiased等,具体可以查看 Line2D [注1]。

通常有以下几种方式可以设置线属性:

  • 使用关键词参数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.plot(x, y, linewidth=2.0)
  • 使用 Line2D 实例的 setter 方法。plot 会返回 Line2D 对象列表,比如 line1, line2 = plot(x1, y1, x2, y2)。下面 假设只绘制一条线,因此使用元组来解包,从而获得列表中的第一个元素,即 line
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
line, = plt.plot(x, y, '-')
line.set_antialiased(False) # 关闭抗锯齿
  • 使用 setp 命令。和 MATLAB 的设置方法非常类似
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lines = plt.plot(x1, y1, x2, y2)
# 使用关键词参数
plt.setp(lines, color='r', linewidth=2.0)
# 或使用类似 MATLAB 的参数值对
plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

设置方法很多,但是强烈推荐使用第二种方法,因为当有多条线的时候可以很明确的指出更改哪一条线的属性。

可以使用 setp 命令获取支持更改的线属性列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lines = plt.plot([1, 2, 3])

plt.setp(lines)
  alpha: float
  animated: [True | False]
  antialiased or aa: [True | False]
  ...snip

多个 figure 和 axes 图形绘制

MATLAB 和 pyplot 都有当前figure当前 axes 的概念,而且所有的绘图操作都指向当前 axes。gca 函数可以返回 当前 axes,gcf 函数可以返回 当前 figure。通常你不需要关心这些,因为这些操作都是在后台完成的。

下面创建两个子图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt

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

figure 命令是可选的,因为默认情况下执行的就是 figure(1)。如果你不指定任何 axes 的话,默认情况下会创建 subplots(111)。subplots 命令指定 numrows,numcols,fignum,其中 fignum从1到 numrows*numcols,如果 numrows*numcols < 10 的话,逗号是可选的,否则三个数之间要有逗号分隔。如果你不想创建长方形网格,可以使用 axes 命令来指定 axes 的位置,比如 axes([left, bottom,width, height]),所有的值都在 [0, 1] 之间。

你也可以使用多个 figure 命令来创建多个 figures,每一个 figure 都可以包含多个 axes 和 subplots。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
plt.figure(1)                # 图1
plt.subplot(211)             # 图1中的第1个子图
plt.plot([1, 2, 3])
plt.subplot(212)             # 图1中第2个子图
plt.plot([4, 5, 6])


plt.figure(2)                # 图2
plt.plot([4, 5, 6])          # 默认创建一个子图

plt.figure(1)               
plt.subplot(211)             
plt.title('Easy as 1, 2, 3') 

你可以使用 clf 函数清除当前 figure,使用 cla 清除当前 axes

添加 text

text 命令可以添加文本到任何位置。xlabel(),ylabel(),title()命令可以添加 text 到指定位置 [注2]。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(19680801)

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

n, bins, patches = plt.hist(x, 50, normed=1, 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 实例,就和之前的 line 一样。你也可以传递关键词参数给 text 函数或使用 setp 命令设置属性,更多属性[注3]。

  • 在文本中使用数学表达式

任何文本表达式中都可以使用 TeX 方程表达式。例如在标题中写入表达式:

,使用 $ 符号将其围起来。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.title(r'$\sigma_i=15$')

字符串前的 r 非常重要,这是为了说明字符串是原始字符串,而不转义 \ 。matplotlib 有内置的 TeX 表达式解析器和排版引擎,而且使用自带的数学字体。关于如何写数学表达式的信息可以查看 [注4],因此你可以跨平台使用数学文本而不用安装TeX。当然你也可以使用 LaTeX 格式化文本并合并到图中或直接保存 postscript (仅适用于下列 backend:Agg,PS,PDF) [注5]。

  • 注释文本

text 命令的基本作用就是放置文本到axes任意位置。通常使用时是为了注释图中的一些特征,annotate 函数更容易实现注释功能。此外,有两个点要考虑,分别是 xy 坐标和 文本坐标,即xytext参数,两个参数值均为 (x, y)元组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt

ax = plt.subplot(111)

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 的位置(arrow tip)和 xytext (text location) 的位置都是在 data 坐标系中。当然还有很多坐标系可以选择 [注6-7]。

对数及其它非线性轴

pyplot 不仅支持 线性刻度,也支持对数刻度 logit 刻度。当数据跨度多个量级时可使用对数刻度,而且改变轴刻度的方式非常简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.xscale(‘log’)
plt.yscale('log')

下面展示使用相同数据,不同的x,y轴刻度进行绘图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt
# 对于 `logit` 刻度非常有用
from matplotlib.ticker import NullFormatter  

np.random.seed(19680801)

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

plt.figure(1)

# 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', linthreshy=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)
# 使用 `NullFormatter` 格式化y 轴tick label 位空,避免有太多 labels
plt.gca().yaxis.set_minor_formatter(NullFormatter())
# 调整布局,放置 logit 间距太大
plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,
                    wspace=0.35)

plt.show()

注1:http://matplotlib.org/api/lines_api.html#matplotlib.lines.Line2D

注2:http://matplotlib.org/users/text_intro.html#text-intro

注3:http://matplotlib.org/users/text_props.html#text-properties

注4:http://matplotlib.org/users/mathtext.html#mathtext-tutorial

注5:http://matplotlib.org/users/usetex.html#usetex-tutorial

注6:http://matplotlib.org/users/annotations.html#annotations-tutorial

注7:http://matplotlib.org/users/annotations.html#plotting-guide-annotation

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气象杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Git配置代理
git clone 的方法分为 https | ssh 两种,而这两种的代理配置方式也是不同用的.
caoayu
2020/10/29
2.3K0
eclipse与IDEA手把手配置git
直接去官网下就可以了,下载完双击安装,安装好之后登录一下你自己的github账号,然后默认或者当前系统用户目录下生成git的配置文件
暖月寒星
2020/03/11
1.5K0
Github Action Public_Private
This is a set of communication interactions between Github open source and privacy Function:
XRSec
2023/08/23
1820
CEF -version 3325完整编译教程
http://blog.csdn.net/baidu_32237719/article/details/79509819(3239 版本编译)
franket
2020/07/24
19K0
APP各种抓包教程
每当遇到一些 APP 渗透测试项目的时候,抓不了包的问题令人有点难受,但是抓不了包并不能代表目标系统很安全,那么接下来我会整理一下目前我所了解到的一些抓包方法
XRSec
2023/08/23
12.9K3
APP各种抓包教程
Git 的奇技淫巧
Git是一个 “分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过 “回撤” 这个功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用 “回撤” 是找不回来的。而 “版本管理工具” 能记录每次的修改,只要提交到版本仓库,你就可以找到之前任何时刻的状态(文本状态)。
iMike
2019/07/29
1.2K0
Proxychains-ng – 一个开源的终端代理工具 – Mac支持
有些时候,启动的一些前端服务需要请求国外资源。我们在电脑挂着VPN,在终端的内容依旧不能访问相关网络。即便ClashX提供命令给终端提供工具,前端开的通过终端开的服务也不支持。此时我们就需要Proxychains-ng服务的支持了
收心
2023/05/09
2.2K0
Proxychains-ng – 一个开源的终端代理工具 – Mac支持
关于git代理的使用姿势
下载速度只有29kib/s,对于稍微大点儿的repo来说显然等的让人焦心。好在一般工作都会提供一些代理,用上代理访问github repo速度就有了质的飞跃:
用户3904122
2022/06/29
6060
Git 操作指南
**版本控制(Revision control)**是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
星姮十织
2021/12/25
7030
我看还有谁不动Git
Git 是一个开源的分布式版本控制系统,用于管理一个或多个文件的整个历史记录。它有助于跟踪文件的变化,同时让多个开发者对同一个文件做出更改,并帮助开发者们在不同时间点进行历史查阅和版本比较。
MCNU云原生
2023/03/17
1.7K0
我看还有谁不动Git
Git 常用命令及多用户相关操作
[up-6108568931341e960672fcd7f8c2d51e57d.png] 多人协作 [bn4067qjfk.png] master:此分支用来发布稳定的代码,合并一般是由管理员合并 dev:此分支用于团队开发,团队成员向此分支提交代码 bug:此分支用于修复紧急bug,修复完成后一般删除 master 分支 当dev完成一个版本的测试后,合并到master git merge dev dev 分支 在本地创建dev分支,需要 git push origin dev 同步到远程 [lz1boe
嘉美伯爵
2021/01/05
5510
Git 常用命令及多用户相关操作
这才是真正的Git——Git内部原理
linux 之父 Linus Torvalds 大家应该都知道,而 git 也是由 Linus 开发的。从 1991 年发布了第一版的 linux 内核,Linux 内核开源项目有着众多的参与者,但绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码,之前市面上也有其他的版本管理系统,比如 CSV、SVN,但是 Linus 觉得它们很蠢,直到有了 BitKeeper 才开始使用版本管理系统。
前端森林
2021/06/25
3K0
这才是真正的Git——Git内部原理
Git相关知识
4、再输入git status可以看到On branch master,这个说明已经在master分之上了
顾翔
2022/09/23
4500
常见Git命令汇总
最近,有朋友私信让我就git 使用做篇文章分享,分享一下我在日常工作中是如何使用git的。我当场就收费两包辣条,最后讨价还价,朋友用1.5包辣条骗到了这篇文章,等他欣喜的走了我打算直接分享出来,气死这个吝啬鬼,当然最终还是希望本文对你有所帮助。
BlueSocks
2022/04/02
6050
常见Git命令汇总
ChatGPT Web
node 需要 ^16 || ^18 || ^19 版本(node >= 14 需要安装 fetch polyfill),使用 nvm 可管理本地多个 node 版本
西里国际站
2023/05/20
1.4K0
ChatGPT Web
Git 常用命令及多用户相关操作
多人协作 master:此分支用来发布稳定的代码,合并一般是由管理员合并 dev:此分支用于团队开发,团队成员向此分支提交代码 bug:此分支用于修复紧急bug,修复完成后一般删除 master 分支
嘉美伯爵
2021/01/18
4060
Github 常用资源搜索技巧 & Git - Pycharm 项目推拉 - 基本使用
GitHub 是一个基于 Git 的代码托管平台,但它不仅仅是一个简单的代码托管服务。以下是 GitHub 的主要功能和特点:
EXI-小洲
2023/10/26
5970
Github 常用资源搜索技巧 & Git - Pycharm 项目推拉 - 基本使用
系统安装工具
系统允许任何来源安装包 sudo spctl --master-disable
列夫托尔斯昊
2022/11/28
1.1K0
[工具教程]-27- macbook的基本操作以及常见问题处理
由于 macOS 默认情况下只允许运行可信任签名的应用,如果 macOS 阻止运行该软件,请打开 macOS 终端,在新建的终端 Shell 中输入:
AI拉呱
2024/03/07
2310
完美主义者的 Win10 装机指南
电脑用久了之后,会变得很卡,各种文件乱七八糟的占满c盘,都不知道该如何清理。因此,养成良好的使用习惯,定期重装系统,是提升工作效率和乐趣的重要一环。但是电脑上个人文件和微信QQ传送的文件经年累月的累积下来,不好整理也无法丢弃。各种软件破解,开发相关的环境配置,都让你害怕而一再向卡慢的电脑妥协。
光帆
2021/11/24
2.3K0
完美主义者的 Win10 装机指南
相关推荐
Git配置代理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档