科学计算少不了用matplotlib画图, 这里写一点心得笔记:
基础概念
- Figure
这个是一个画布,所有图片都在这个画布上
import matplotlib.pyplot as plt
fig = plt.figure()
- Subplot
这个是一个子图, 画布上可以有多个子图,按:“行-列-个数” 排列,即有规律的顺序.
# 2行1列
ax1 = plt.subplot(211) # 第一个子图
plt.imshow(np.random.random((100, 100)), cmap=plt.cm.BuPu_r)
ax2 = plt.subplot(212) # 第二个子图
plt.imshow(np.random.random((100, 100)), cmap=plt.cm.BuPu_r)
- 坐标系
- axes
指画布中所有的坐标系,可以有多个 - ax
指画布中的一个坐标系,不同坐标系直接可以是重叠的 - axis
指一个坐标系中的一个轴,如二维坐标系的x轴或y轴
常用方法(plt)
imshow
将数据显示为图像,即二维显示(W,H)。参数:
matplotlib.pyplot.imshow(
X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None,
vmin=None, vmax=None, origin=None, extent=None, *, filternorm=True, filterrad=4.0,
resample=None, url=None, data=None, **kwargs)
X: array-like or PIL image
(M, N): an image with scalar data.
The values are mapped to colors using normalization and a colormap.
See parameters norm, cmap, vmin, vmax.
(M, N, 3): an image with RGB values (0-1 float or 0-255 int).
(M, N, 4): an image with RGBA values (0-1 float or 0-255 int), i.e. including transparency.
extent:floats (left, right, bottom, top)
The bounding box in data coordinates that the image will fill.
The image is stretched individually along x and y to fill the box.
即该图的坐标刻度(x1,x2,y1,y2)
origin{'upper', 'lower'}, default: rcParams["image.origin"] (default: 'upper')
图像的坐标起点,默认y轴起点在上方(从上到下),适用于图像。
如果在下方,x,y的起点在同一位置。
scatter
散点图
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None,
plotnonfinite=False, data=None, **kwargs)
c: array-like or list of colors or color
点的颜色, 如:'w'代表白色(white)
marker: MarkerStyle, default: rcParams["scatter.marker"] (default: 'o')
点的形状
edgecolors{'face', 'none', None} or color or sequence of color
点的边缘颜色,默认和点的颜色一致(face),或者黑边'k'
axes
- fig.add_axes([x,y,w,h])
可以在画布中添加一个坐标系,参数为起始坐标 (x,y), 其中左下角为起点(0,0);以及坐标系的宽高(w,h), 默认整个画布的宽高为(1,1), 所以定义一个坐标系的时候需要预留一定的边框:
fig = plt.figure()
ax1 = fig.add_axes([0.1,0.1,0.8,0.8]) # 起点不是 (0,0), 为了左下角预留一定的边宽 (margin), 长度不是(1,1),为了给边缘预留0.2的margin.
ax2 = fig.add_axes([0.5,0.5,0.25,0.25]) # 起点是画布中心,长宽度为画布长宽的0.25
- plt.axes([x,y,w,h])
返回一个axes坐标系(对象),一般用于参数(如cax)输入,已确定画图对象的位置
Reference
- https://matplotlib.org/stable/
- https://www.zhihu.com/question/51745620