%matplotlib notebook #会在 Notebook 中启动交互式图形。
%matplotlib inline #会在 Notebook 中启动静态图形。
import matplotlib as mpl
import matplotlib.pyplot as plt
plt.style.use('classic') #设置绘图样式,classic风格
plt.style.use('seaborn-whitegrid') #网格样式
eg:1
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig = plt.figure()
plt.plot(x, np.sin(x), '-')
plt.plot(x, np.cos(x), '--');
plt.show()
fig.savefig('C:/variety_project/dataScience/my_figure.png') #保存画出的图
from IPython.display import Image
Image('C:/variety_project/dataScience/my_figure.png') #显示图片
Eg:2 MATLAB风格接口
plt.figure() # 创建图形
# 创建两个子图中的第一个,设置坐标轴
plt.subplot(2, 1, 1) # (行、列、子图编号)
plt.plot(x, np.sin(x))
# 创建两个子图中的第二个,设置坐标轴
plt.subplot(2, 1, 2)
plt.plot(x, np.cos(x));
plt.gcf()(获取当前图形)
plt.gca()(获取当前坐标轴)
eg:3 面向对象接口
# 先创建图形网格
# ax是一个包含两个Axes对象的数组
fig, ax = plt.subplots(2)
# 在每个对象上调用plot()方法
ax[0].plot(x, np.sin(x))
ax[1].plot(x, np.cos(x));
Eg:4
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x));
ax.set(xlim=(0, 10), ylim=(-2, 2),xlabel='x', ylabel='cos(x)',title='A Simple Plot');
Eg:5 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颜色名称
eg:6 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=':'); # 实点线
eg:7 线型和颜色结合
plt.plot(x, x + 0, '-g') # 绿色实线
plt.plot(x, x + 1, '--c') # 青色虚线
plt.plot(x, x + 2, '-.k') # 黑色点划线
plt.plot(x, x + 3, ':r'); # 红色实点线
eg:8 自定义坐标轴上下限
plt.plot(x, np.sin(x))
plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5);
eg:9 通过传入[xmin, xmax, ymin, ymax]控制图形
plt.plot(x, np.sin(x))
plt.axis([-1, 11, -1.5, 1.5]); #通过传入[xmin, xmax, ymin, ymax]
eg:10
plt.plot(x, np.sin(x))
plt.axis('tight'); #收紧坐标轴,不留空白区域
plt.axis('equal');
eg:11 设置图形标签
plt.plot(x, np.sin(x))
plt.title("A Sine Curve") #设置图名
plt.xlabel("x") #设置x轴标签
plt.ylabel("sin(x)"); #设置y轴标签
plt.plot(x, np.sin(x), '-g', label='sin(x)') #设置图例
plt.plot(x, np.cos(x), ':b', label='cos(x)') #设置图例
plt.axis('equal')
plt.legend(); #创建图例
plt 函数转换成 ax 方法
plt.plot() → ax.plot()
plt.legend() → ax.legend()
plt.xlabel() → ax.set_xlabel()
plt.ylabel() → ax.set_ylabel()
plt.xlim() → ax.set_xlim()
plt.ylim() → ax.set_ylim()
plt.title() → ax.set_title()
eg:12 画散点图
plt.scatter(x, y, marker='o');
rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,cmap='viridis')
plt.colorbar(); # 显示颜色条
eg:13 绘制误差线
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
x = np.linspace(0, 10, 50)
dy = 0.8
y = np.sin(x) + dy * np.random.randn(50)
plt.errorbar(x, y, yerr=dy, fmt='.k');
plt.errorbar(x, y, yerr=dy, fmt='o', color='black',ecolor='lightgray', elinewidth=3, capsize=0);
密度图与等高线图
用 plt.contour 画等高线图、用 plt.contourf 画带有填充色的等高线图(filled contourplot)的色彩、用 plt.imshow 显示图形
Eg:14 画等高线
x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) ** 10 + np.cos(10 + Y * X) * np.cos(X)
plt.contour(X, Y, Z, colors='black');
plt.contourf(X, Y, Z, 20, cmap='RdGy')
plt.colorbar();
频率分布直方图
Eg:15 plt.hist频率分布直方图
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
data = np.random.randn(1000)
plt.hist(data);
绘制三维图
Eg:15
from mpl_toolkits import mplot3d
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
eg:16
ax = plt.axes(projection='3d')
# 三维线的数据
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline, zline, 'gray')
# 三维散点的数据
zdata = 15 * np.random.random(100)
xdata = np.sin(zdata) + 0.1 * np.random.randn(100)
ydata = np.cos(zdata) + 0.1 * np.random.randn(100)
ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens');
eg:17
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z=np.sin(np.sqrt(X ** 2 + Y ** 2))
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z');
ax = plt.axes(projection='3d')
ax.plot_wireframe(X, Y, Z, color='black') #线框图
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,cmap='viridis', edgecolor='none') #曲面图
ax.set_title('surface');