做过基因测序,尤其是做过RNAseq的同学都知道,R语言中有一款数据可视化神器ggplot2,其绘图功能强大,但它的缺陷是不能绘制3D图形,需要加载扩展包,很麻烦。
如果用Python语言,matplotlib只需要几行代码就能画出漂亮的3D图形,要啥有啥,不信接着看:
3D散点图
代码如下:
import numpy as np
x = np.random.normal(0, 1, 100)
y = np.random.normal(0, 1, 100)
z = np.random.normal(0, 1, 100)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x, y, z)
plt.show()
![5f2f676a3ac2c97ec891c927da5b593a.png](https://img-blog.csdnimg.cn/img_convert/5f2f676a3ac2c97ec891c927da5b593a.png)
3D线型图
代码如下:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)
y = np.sin(x)
z = np.cos(x)
fig = plt.figure()
ax = Axes3D(fig)
ax.plot(x, y, z)
plt.show()
![05ddf19211b69964bf77cfe96af17d06.png](https://img-blog.csdnimg.cn/img_convert/05ddf19211b69964bf77cfe96af17d06.png)
3D柱状图
代码如下:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = Axes3D(fig)
x = [0, 1, 2, 3, 4, 5, 6]
for i in x:
y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
z = abs(np.random.normal(1, 10, 10))
ax.bar(y, z, i, zdir='y', color=['r', 'g', 'b', 'y'])
plt.show()
![3f2639afa7c67f6e56bcb378c6b2d33a.png](https://img-blog.csdnimg.cn/img_convert/3f2639afa7c67f6e56bcb378c6b2d33a.png)
3D曲面图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-2, 2, 0.1)
Y = np.arange(-2, 2, 0.1)
X, Y = np.meshgrid(X, Y)
Z = np.sqrt(X ** 2 + Y ** 2)
ax.plot_surface(X, Y, Z, cmap=plt.cm.winter)
plt.show()
![ab500b54202404827af6bc6036146515.png](https://img-blog.csdnimg.cn/img_convert/ab500b54202404827af6bc6036146515.png)
3D混合图
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = Axes3D(fig)
x1 = np.linspace(-3 * np.pi, 3 * np.pi, 500)
y1 = np.sin(x1)
ax.plot(x1, y1, zs=0, c='red')
x2 = np.random.normal(0, 1, 100)
y2 = np.random.normal(0, 1, 100)
z2 = np.random.normal(0, 1, 100)
ax.scatter(x2, y2, z2)
plt.show()
![f4cea346997dd3c56d985f29f996da5a.png](https://img-blog.csdnimg.cn/img_convert/f4cea346997dd3c56d985f29f996da5a.png)
3D子图
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1, projection='3d')
x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)
y = np.sin(x)
z = np.cos(x)
ax1.plot(x, y, z)
ax2 = fig.add_subplot(1, 2, 2, projection='3d')
X = np.arange(-2, 2, 0.1)
Y = np.arange(-2, 2, 0.1)
X, Y = np.meshgrid(X, Y)
Z = np.sqrt(X ** 2 + Y ** 2)
ax2.plot_surface(X, Y, Z, cmap=plt.cm.winter)
plt.show()
![24ab0bb744b1f1160a1b92c2a3d95407.png](https://img-blog.csdnimg.cn/img_convert/24ab0bb744b1f1160a1b92c2a3d95407.png)
小结
Python语言简洁而优雅,不仅绘图功能强大,还是目前最火的人工智能用到最多的语言。画图的例子还有很多,上面每个图还可进一步精雕细凿,调整颜色和饱和度,精致到艺术品水平,自己试试就知道了。