在深入使用matplotlib
之前你需要知道几个matplotlib
技巧,这些技巧能帮助你更快速掌握matplotlib
。
导入matplotlib
和numpy
,pandas
一样,在导入matplotlib
时我们也可以用一些常用的简写形式:
pyplot
是最常用的画图模块接口,功能非常强大。
import matplotlib as mplimport matplotlib.pyplot as plt
显示图像
开发环境的不同,显示图像的方式也就不一样,一般有三种开发环境,分别是脚本、IPython shell
、IPython Notebook
。
在脚本中使用matplotlib
进行可视化时显示图像可以使用plt.show()
。
在IPython shell
中使用matplotlib
可视化非常方便,使用%matplotlib
命令启动matplotlib
模式。之后的任何plt
命令都会自动打开一个图像窗口,当有新的命令,图像就会更新。但对已经画好的图像不会自动实时更新。对于这种可以使用plt.draw()
强制更新。
在IPython Notebook
中画图和IPthon shell
类似,也需要使用%matplotlib
命令。图像的显示是嵌在IPython Notebook
页面中。有两种展示形式:%matplotlib notebook
交互式图形;%matplotlib inline
静态图形。
matplotlib
还可以直接将图像保存文件,通过plt.savefig("test.jpg")
命令保存文件。
plt.savefig("test.jpg")
画图接口
matplotlib
有两个画图接口:一个是便捷的matlab
风格接口,另一个是功能更强大的面向对象接口。
matplotlib
的matlab
接口许多语法都和MATLAB
类似,所以使用过MATLAB
的朋友们想必很快就能上手matplotlib
。
import matplotlib.pyplot as plt#导入模块
plt.figure(figsize=(10,10))#创建图形,并设置大小为10 x 10
plt.subplot(2,1,1)#创建子图1(行,列,子图编号)
plt.plot([1,2,3,4], [1,2,3,4])
plt.subplot(2,1,2)#创建子图2(行,列,子图编号)
plt.plot([4,3,2,1], [1,2,3,4])
plt.show()
面向对象接口可以适应更加复杂的场景,更好地控制图形,在画比较复杂的图形市,面向对象方法会更方便。通过下面的代码,可以用面向对象接口重新创建之前的图形。
绘制线形图
在所有图形中,最简单的应该就是线性方程y = f (x)
的可视化了。来看看如何创建这个简单的线形图。要画Matplotlib
图形时,都需要先创建一个图形fig
和一个坐标轴ax
。创建图形与坐标轴的最简单做法是:
import matplotlib.pyplot as plt#导入模块
plt.style.use('seaborn-whitegrid')#设置matplotlib画图样式
fig = plt.figure()
ax = plt.axes()
在Matplotlib
中,figure
(plt.Figure
类的一个实例)可以被看成是个能够容纳各种坐标轴、图形、文字和标签的容器。就像你在图中看到的那样,axes
(plt.Axes
类的一个实例)是一个带有刻度和标签的矩形,最终会包含所有可视化的图形元素。
在这里我们一般使用变量fig
表示一个图形实例,用变量ax
表示一个坐标轴实例。接下来使用ax.plot
画图,从简单的正弦曲线开始:
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x))
也可以使用pylab
接口画图,这时图形与坐标轴都在底层执行,执行结果和上图一样:plt.plot(x, np.sin(x))
试想下如果我们重复调用plot
命令会发生什么,它会在一张图中创建多条线:
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
设置颜色和风格
在画图的过程中通常对图形的第一次调整是调整它线条的颜色与风格。
plt.plot()
函数可以通过相应的参数设置颜色和风格,修改颜色使用color
参数,它支持各种颜色值的字符串,具体使用如下:
plt.plot(x, np.sin(x - 0), color='blue') # 标准颜色名称
plt.plot(x, np.sin(x - 1), color='g') # 缩写颜色代码(rgbcmyk)
plt.plot(x, np.sin(x - 2), color='0.75') # 范围在0~1的灰度值
plt.plot(x, np.sin(x - 3), color='#FFDD44') # 十六进制(RRGGBB,00~FF)
plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB元组,范围在0~1
plt.plot(x, np.sin(x - 5), color='chartreuse') # HTML颜色名称
常用颜色对应值:
取值 | 颜色 |
| |
| |
| |
| |
| |
| |
| |
| |
如果不指定颜色,matplotlib
会为多条线自动循环使用一组默认的颜色。设置样式使用linestyle
参数:
plt.plot(x, x + 0, linestyle='solid')
plt.plot(x, x + 1, linestyle='dashed')
plt.plot(x, x + 2, linestyle='dashdot')
plt.plot(x, x + 3, linestyle='dotted')
#也可以用下面的简写形式
plt.plot(x, x + 4, linestyle='-') # 实线
plt.plot(x, x + 5, linestyle='--') # 虚线
plt.plot(x, x + 6, linestyle='-.') # 点划线
plt.plot(x, x + 7, linestyle=':') # 实点线
还可以将linestyle
和color
编码组合起来,作为plt.plot()
函数的一个非关键字参数使用:
plt.plot(x, x + 0, '-g') # 绿色实线
plt.plot(x, x + 1, '--c') # 青色虚线
plt.plot(x, x + 2, '-.k') # 黑色点划线
plt.plot(x, x + 3, ':r'); # 红色实点线
设置坐标轴上下限
虽然matplotlib
会自动为你的图形选择最合适的坐标轴上下限,但是有时自定义坐标轴上下线可能会更好。调整坐标轴上下限最基础的方式是plt.xlim()
和plt.ylim()
:
plt.plot(x, np.sin(x))
plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5)
如果你想要让坐标轴逆序显示,那么只需要逆序设置坐标轴刻度值就可以了。matplotlib
还有一个方法是plt.axis()
。通过传入[xmin
,xmax
,ymin
,ymax
]对应的值,这样就可以用一行代码设置x
和y
的限值:
plt.plot(x, np.sin(x))
plt.axis([-1, 11, -1.5, 1.5])
还支持按照图形的内容自动收紧坐标轴,不留空白区域:
plt.plot(x, np.sin(x))
plt.axis('tight')
设置图形标签
图形标签与坐标轴标题是最简单的标签,设置方法如下:
plt.plot(x, np.sin(x))
plt.title("A Sine Curve")
plt.xlabel("x")
plt.ylabel("sin(x)");