您的位置:首页 > 编程语言 > PHP开发

Matplotlib笔记(一)

2016-12-07 22:09 337 查看

Table of Contents

1. 使用python+matplotlib作二维图

1.1. 简介

1.2. 快速绘图

1.3. 控制线型

1.4. 绘制多轴图

使用python+matplotlib作二维图

简介

matplotlib是python下一个用于2D绘图的库. matplotlib的作者最开始是matlab的忠实用户, 但随着研究的深入, 他发现matlab已经不能满足他的需求, 而且也没有发现其他的绘图软件能满足. 于是作为程序员的作者撸起袖子从头开始用python写一个绘图库, 这就是matplotlib的来历. matplotlib提供了一整套和matlab相似的命令, 十分适合交互式地进行制图. 而且也可以方便地将它作为绘图控件, 嵌入GUI应用程序中. matplotlib的功能极其丰富, 官网上有各式各样gallery,并且能够获得它的源码和PDF文件.

在使用matplotlib前首先要熟悉NumPy, NumPy是一个支持多维数组的科学计算库. matplotlib的数据都是以NumPy的数组形式存储的.

快速绘图

matplotlib绘图的思想比较简单, 首先你有数据. 数据往往是以数组的形式存放, 然后建立一个绘图对象plot, 其他的绘图特征都是以对象的形式添加到plot对象上的. 下面是一个最简单的例子:

import matplotlib.pyplot as plt

plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()




在上面的代码中, 如果
plot
中只有一个数据
[1,2,3,4]
, 则将其默认为是
y
轴, 对于
x
轴自动为其赋值. 这里
x
的数据默认为
[0,1,2,3]
.

plot()
是一个非常丰富的函数, 它有一系列命令, 使用这些命令可以实现不同的绘图功能. 如果要汇出
x vs y
的图片, 可以使用如下的命令:

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


有时我们希望给线条不同的颜色和形状, 也是可以通过plot命令实现的, 默认的是
'b-'
, 代表着蓝色实线, 下面的例子是一个红圈表示的例子:

import matplotlib.pyplot as plt
plt.plot([1,2,3,4],[1,4,9,16], 'ro')
plt.axis([0,6,0,20])
plt.ylabel('some numbers')
plt.show()




上面代码中, 多了
axis()
这个函数, 它的作用是设置
x
y
轴的范围分别是
[0,6]
[0,20]
.

控制线型

matplotlib提供了非常丰富的线的性质, 可以根据自己的需求选择线型. 常用的有如下的几种:

PropertyValue Type
labelany string
marker‘+’ / ‘,’ / ‘.’ / ‘1’/ ‘2’ / ‘3’ / ‘4’
linewidthfloat value in points
linstyle‘-’ / ‘—’ / ‘:’
一个例子

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(2*x)
# 设置图像的尺寸8*4
plt.figure(figsize=(8,4))
# 绘图, 选择颜色, 线条宽度和线型
plt.plot(x,y,label='$sin(x)$',color='r',linewidth=1.2, linestyle='--')
plt.plot(x,z,label='$cos(x^2)$',color='g',linewidth=1.2, linestyle=':')
plt.plot(x,np.sin(x/2),label='$sin(x/2)$',color = 'b',linewidth=1.2, linestyle='-')
#x轴的label
plt.xlabel("Time(s)")
#y轴的label
plt.ylabel("Volt")
#图的名字
plt.title("PyPlot First Example")
#y轴的刻度
plt.ylim(-1.2,1.2)
#显示各个图的legend
plt.legend()
plt.show()




绘制多轴图

论文中经常出现将多个图在同一个轴上进行绘制的情况. 在matplotlib中可是用 subplot解决. 如下:

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
#定义函数f(t)
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(1)
表示图片整体,
subplot(211)
表示2个图中的第一个.
subplot(212)
表示2个图中的第二个.

以上只是matplotlib功能中很小的一部分, 但是已经包含最常用的用法, 可以作为一个起点. 更复杂和精致的绘图可以参考matplotlib的官方网站.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python matplotlib