博客
关于我
Pyplot tutorial,Pyplot官方教程自翻译
阅读量:799 次
发布时间:2023-03-05

本文共 5638 字,大约阅读时间需要 18 分钟。

Matplotlib plot函数详解

Matplotlib plot函数是一个命令行风格的函数集合,使matplotlib像MATLAB一样工作。每个plot函数会对图形窗口(figure)做一些改变,例如:创建一个图形窗口、在图形窗口上创建一个绘图区(plotting area)、在绘图区上画一些线条、在线条上标注说明文字等等。在中,通过函数调用保留不同的状态,这样就可以对当前图形(figure)和绘图区(plotting area)保持跟踪,并且当前绘制函数(plotting functions)被导向到当前坐标系(请注意这里的“坐标”,在文档中的大多数地方,指的是图形窗口的坐标部分,而非严格意义上的数学术语)

你可能感到奇怪,为什么x轴的范围是多0到3而y轴是从1到4。如果你只给命令提供了一个列表或数组参数,matplotlib认为它是一个y值的序列,然后自动生成x值。因为Python的序列范围从0开始,所以默认的x向量与y向量有相同的长度,但是x从0开始。因此,x的值是[0,1,2,3]。

plot()是个通用【或万能的】(versatile command)的命令,它有一个可变数量的参数。例如,绘制x和y,你可以发出以下命令:

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

对于每一对x和y参数,有一个第三个参数可以设置图的颜色和线型。字母和符号的字符串格式来自MATLAB,颜色字母与线型字符紧贴。默认的字符串格式为“b-”,这是一条实心蓝色线。例如,要用红色圆点绘制上图,你要使用以下命令:

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

如果matplotlib只限于使用list工作,那它对于数据处理就没什么价值了。一般来讲,你会使用numpy数组。事实上,所有序列(sequence)都会在内部转为numpy数组。下面的例子展示了在一条命令中使用数组用不同的格式绘制多条线条。

import numpy as npimport matplotlib.pyplot as plt# 偶然采样时间在200ms间隔上t = np.arange(0., 5., 0.2)# 红色虚线,蓝色方块和绿色三角plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')plt.show()

Lines有很多属性可以设置:线宽度、线条样式、抗锯齿等等。点击查看详细。有很多方法可以设置线的属性:

  • 使用关键字参数:
  • 使用Line2D实例的设置方法。plot返回一个Line2D对象的列表,例如:line1,line2=plot(x1, y1, x2, y2),在下面的代码中,假设只有一条线,这样返回的列表长度为1。我们把线条组成的元组拆包到变量line,得到列表的第1个元素。
  • 使用命令。下面的例子使用了MATLAB样式的命令在一个线条列表上设置多个属性。setp透明地与单个对象或多个对象的列表一起工作。既可以用python的关键字参数,也可以用MATLAB风格的“字符串/值”对。
  • 例如:lines = plt.plot(x1, y1, x2, y2)# 使用关键字 argsplt.setp(lines, color='r', linewidth=2.0)# 或使用 MATLAB风格的字符串值对plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

下面是Line2D的有效属性:

Property Value Type
alpha float
animated [True | False]
antialiased or aa [True | False]
clip_box a matplotlib.transform.Bbox instance
clip_on [True | False]
clip_path a Path instance and a Transform instance, a Patch
color or c any matplotlib color
contains the hit testing function
dash_capstyle ['butt' | 'round' | 'projecting]
dash_joinstyle ['miter' | 'round' | 'bevel]
dashes sequence of on/off ink in points
data (np.array xdata, np.array ydata)
figure a matplotlib.figure.Figure instance
label any string
linestyle or ls ['-' | '--' | '-.' | ':' | 'steps' | ...]
linewidth or lw float value in points
lod [True | False]
marker ['+' | ',' | '.' | '1' | '2' | '3' | '4']
markeredgecolor or mec any matplotlib color
markeredgewidth or mew float value in points
markerfacecolor or mfc any matplotlib color
markersize or ms float
markevery [ None | integer | (startind, stride) ]
picker used in interactive line selection
pickradius the line pick selection radius
solid_capstyle ['butt' | 'round' | 'projecting]
solid_joinstyle ['miter' | 'round' | 'bevel]
transform a matplotlib.transforms.Transform instance
visible [True | False]
xdata np.array
ydata np.array
zorder any number

调用函数,以一条或多条线图作为参数传入,即可获得一个可设置的线图属性列表:In [69]: lines = plt.plot([1, 2, 3])In [70]: plt.setp(lines)alpha: float animated: [True | False] antialiased or aa: [True | False] ...snip

工作在多个图形和坐标上

MATLAB和,有当前图形和坐标的概念。所有绘制命令都是对当前坐标进行操作。函数返回当前坐标系(一个实例),返回当前图形。通常你不必担心,因为它是幕后工作。下面是创建两个子图的脚本:import numpy as npimport matplotlib.pyplot as plt

def f(t):return np.exp(-t) * np.cos(2np.pit)

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(2np.pit2), 'r--')plt.show()

你可以创建多个图形通过多次调用函数。当然,每个图形都可以包含你期望的图形和坐标:import matplotlib.pyplot as plt

plt.figure(1)plt.subplot(211)plt.plot([1, 2, 3])plt.subplot(212)plt.plot([4, 5, 6])

plt.figure(2)plt.plot([4, 5, 6])

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

你可以清除当前图形和坐标:plt.close()plt.close()

如果你正在制作多个图形,你需要意识到一个事实:如果不明确调用函数来关闭图形,那么图形所占内存就不会被完全释放。删除所有对图形的引用,或者使用windows的任务管理器杀掉显示在屏幕上的图形窗口,这些都不够,因为pyplot保持了内部的引用,直到调用显式关闭。

操作文本

可以使用plot命令在任意位置添加文本。例如:import numpy as npimport matplotlib.pyplot as plt

Fixing random state for reproducibility

np.random.seed(19680801)

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

the histogram of the data

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, 0.025, r'$\mu=100,\ \sigma=15$')plt.axis([40, 160, 0, 0.03])plt.grid(True)plt.show()

所有的plot命令都会返回一个实例。正像上图所示,你可以通过向文本函数传入参数或使用setp函数,来定制属性:t = plt.xlabel('my data', fontsize=14, color='red')

在文本中使用数学表达式:plt.title(r'$\sigma_i=15$')

Matplotlib可以在任何文本表达式中接受TeX等式。例如,在标题中写:plt.title(r'$\sigma_i=15$')

在绘图时添加文本注释:import numpy as npimport matplotlib.pyplot as plt

ax = plt.subplot(111)t = np.arange(0.0, 5.0, 0.01)s = np.cos(2np.pit)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()

对数和其它非线性坐标支持:plt.xscale('log')

下面是对于y轴的相同数据不同尺度(scales)的四个绘图:import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.ticker import NullFormatter

Fixing random state for reproducibility

np.random.seed(19680801)

make up some data in the 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))

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

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

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

plt.subplot(224)plt.plot(x, y)plt.yscale('logit')plt.title('logit')plt.grid(True)

Format the minor tick labels of the y-axis into empty strings with

NullFormatter,避免太多显示标签

plt.gca().yaxis.set_minor_formatter(NullFormatter())

Adjust the subplot layout,因为logit图形会比普通图形占更多的空间

plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25, wspace=0.35)

plt.show()

转载地址:http://ibafk.baihongyu.com/

你可能感兴趣的文章
ps命令详解
查看>>
PyTorch-Tutorials【pytorch官方教程中英文详解】- 1 Quickstart
查看>>
PS网页设计教程XVIII——在Photoshop中设计优雅的乡村酒店或餐厅的网页布局
查看>>
PS获取RGB和十六进制的颜色值
查看>>
PyTorch 的 10 条顶级知识点
查看>>
PS辅助工具Assistor PS
查看>>
pt-archiver 归档历史数据及参数详解
查看>>
pt-online-schema-change使用详解
查看>>
PyTorch 模型性能分析和优化 — 第 2 部分
查看>>
PTA L1-011 A-B
查看>>
pta l2-1紧急救援(Dijkstra)
查看>>
pta求阶乘序列前n项和_学霸整理——求数列的通项公式解法集锦,转化、归纳一文全懂...
查看>>
SpringBoot中集成Redis实现对redis中数据的解析和存储
查看>>
pthread_create导致的程序崩溃
查看>>
ptyhon POSIX
查看>>
public private protected default小结
查看>>
PublicCMS怎么用金蝶Apusic Application Server部署
查看>>
publish over ssh、 Kubernetes Continuous Deploy插件
查看>>
PubMed详解-ChatGPT4o作答
查看>>
Pubsub Extensions for Smack
查看>>