4.2 高级绘图
这一节将介绍几个Matplotlib的高级绘图功能,这些功能与图形和地图有关,然后在介绍其它几个常用的绘图包。
4.2.1 图像处理
一个彩色的NxM的图片可以表示为NxMx3的NumPy数组,如此一来,图像处理算法就可以由NumPy和SciPy实现,并由Matplotlib展现了。此外,PIL包(Python Imaging Library)实现了基本的图像处理算法。
读取图片
im = imread('squirrel.png')
im.shape
# (300L, 300L, 3L)
Matplotlib提供了imread,可加载PNG图片,如果安装了PIL,那么可以通过Image.open读取其它类型的图片,如JPEG、BMP、GID和TIFF等。
显示图片
使用imshow函数,借助于PIL可以做出更炫一点儿的功能:
imshow(array(img.rotate(45.)))
这里先将图片逆时针旋转45度,在显示出来。
高级图像处理 - 色彩量化(color quantization)
尽管PIL看起来已经有点儿高级了,但SciPy还有更高端的算法,比如色彩量化。
TODO
4.2.2 地图
地图是一种重要且复杂的图形。basemap包给Matplotlib带来了地理信息处理的能力。这里我们继续用cities数据集来绘制一个人口密度图。
import pandas as pd
data = pd.read_csv('worldcitiespop.txt', low_memory=False)
locations = data[['Longitude', 'Latitude']].as_matrix()
population = data.Population
from mpl_toolkits.basemap import Basemap
m = Basemap(projection='mill', llcrnrlat=-65, urcrnrlat=85, llcrnrlon=-180, urcrnrlon=180)
x, y = m(locations[:, 0], locations[:, 1])
x0, y0 = m(-180, -65)
x1, y1 = m(180, 85)
weights = population.copy()
weights[isnan(weights)] = 1000
h, _, _ = histogram2d(x, y, weights=weights, bins=(linspace(x0, x1, 500), linspace(y0, y1, 500)))
h[h == 0] = 1
import scipy.ndimage.filters
z = scipy.ndimage.filters.gaussian_filter(log(h.T), 1)
m.drawcoastlines()
m.imshow(z, origin='lower', extent=[x0, x1, y0, y1], cmap=get_cmap('Reds'))
4.2.3 3D图形
Matplotlib包含的3D绘图包mplot3d具有基本的3D绘图功能,这里给出一个简单的例子。
4.2.4 动画
Matplotlib能够创建动画,还可以将动画导出为MP4视频。更多信息在Matplotlib Animation API
4.2.5 其它可视化包
- Chaco
- PyQwt
- PyQtGraph
- Visvis
- Mayavi
- PyOpenGL
- Galry