13、三维图绘制及添加文本

1、简述

尽管Matplotlib最初设计时只考虑了二维绘图,但在后来的版本中,在Matplotlib的二维显示基础上建立了一些三维绘图实用程序,为三维数据可视化提供了一套工具。通过导入Matplotlib软件包中包含的mplot3d工具包,可以启用三维绘图。

通过将关键字projection='3d’传递给任何一个普通轴创建例程,可以创建一个三维轴。

2、3D line plot

现在我们可以绘制各种类型的三维图。最基本的三维图是由(x, y, z)三组图集创建的三维线图。这可以使用ax.plot3D函数来创建。

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
z = np.linspace(0, 1, 100)
x = z * np.sin(20 * z)
y = z * np.cos(20 * z)
ax.plot3D(x, y, z, 'gray')
ax.set_title('3D line plot')
plt.show()

显示结果如下:
在这里插入图片描述

3、3D Scatter plot

使用ax.scatter3D函数生成3D散点图。

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
z = np.linspace(0, 1, 100)
x = z * np.sin(20 * z)
y = z * np.cos(20 * z)
c = x + y
ax.scatter(x, y, z, c=c)
ax.set_title('3d Scatter plot')
plt.show()

在这里插入图片描述

4、三维等高线图(3D Contour Plot)

ax.contour3D()函数可以创建三维等高线图。它要求所有的输入数据都是二维规则网格的形式,每个点的Z数据都要进行评估。这里,我们将展示一个三维正弦函数的三维轮廓图。

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
def f(x, y):
   return np.sin(np.sqrt(x ** 2 + y ** 2))
	
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)

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.set_title('3D contour')
plt.show()

在这里插入图片描述

5、三维线框图(3D Wireframe plot)

线框图将数值网格化,并将其投射到指定的三维曲面上,可以使产生的三维形式相当容易可视化。plot_wireframe()函数用于实现以下目的。

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
def f(x, y):
   return np.sin(np.sqrt(x ** 2 + y ** 2))
	
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_wireframe(X, Y, Z, color='black')
ax.set_title('wireframe')
plt.show()

显示结果如下:
在这里插入图片描述

6、三维曲面图(3D Surface plot)

曲面图显示了一个指定的因变量(Y)和两个自变量(X和Z)之间的函数关系。该图是等高线图的配套图。表面图就像线框图,但线框的每个面都是一个填充的多边形。这可以帮助人们感知被可视化的曲面的拓扑结构。plot_surface()函数的参数为x,y和z。

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
x = np.outer(np.linspace(-2, 2, 30), np.ones(30))
y = x.copy().T # transpose
z = np.cos(x ** 2 + y ** 2)

fig = plt.figure()
ax = plt.axes(projection='3d')

ax.plot_surface(x, y, z,cmap='viridis', edgecolor='none')
ax.set_title('Surface plot')
plt.show()

显示结果如下:
在这里插入图片描述

7、添加文本(Working With Text)

用户可以对文本属性(字体大小、字体重量、文本位置和颜色等)进行大量的控制。Matplotlib实现了大量的TeX数学符号和命令。

下面列出的命令用于在Pyplot界面中创建文本。

参数 属性
text 在Axes的任意位置添加文字。
annotate 在Axes的任意位置添加一个带有箭头的注释。
xlabel 在Axes的X轴上添加一个标签。
ylabel 在Axes的Y轴上添加一个标签。
title 给 Axes加个标题。
figtext 在图的任意位置添加文字。
suptitle 给图增加一个标题。

所有这些函数都会创建并返回一个matplotlib.text.Text()实例。下面是代码演示:

import matplotlib.pyplot as plt
fig = plt.figure()

ax = fig.add_axes([0.2,0.2,0.6,0.6])

ax.set_title('axes title')
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
ax.text(3, 8, 'boxed italics text in data coords', style='italic', 
bbox = {
    
    'facecolor': 'red'})
ax.text(2, 6, r'an equation: $E = mc^2$', fontsize = 15)
ax.text(4, 0.05, 'colored text in axes coords',
verticalalignment = 'bottom', color = 'green', fontsize = 15)
ax.plot([2], [1], 'o')
ax.annotate('annotate', xy = (2, 1), xytext = (3, 4),
arrowprops = dict(facecolor = 'black', shrink = 0.05))
ax.axis([0, 10, 0, 10])
plt.show()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45671036/article/details/112787193