如何改变Python Matplotlib表面图的颜色并添加网格线?
Matplotlib是Python中常用的可视化库之一,可以绘制各种类型的图像,包括曲线图、散点图、饼图、柱状图、表面图等。在这里,我们将讨论如何改变Matplotlib表面图的颜色并添加网格线。
Matplotlib表面图介绍
Matplotlib的表面图是一种三维图像,它可以用于显示三元函数的值或者表面较为平滑的数据。在表面图中,数据通常以颜色不同的三维曲面来表示,曲面的形状由X,Y坐标上的坐标和一个可选的Z大小值决定。表面图可以很好地表示各类数据的变化趋势和分布规律。
表面图的生成
Matplotlib中的表面图可以用mpl_toolkits.mplot3d
库的Axes3D
类绘制。下面是一个示例代码,生成一个由正弦函数二维数组变换而来的表面图。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 构造数据
X = np.arange(-5, 5, 0.1)
Y = np.arange(-5, 5, 0.1)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)
# 绘图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='cool', alpha=0.8)
plt.show()
代码说明:
- 通过
np.meshgrid
方法,生成了一个以X,Y坐标为基础的网格; - 使用正弦函数生成一个R数组,代表z的大小值;
- 以X,Y,Z为参数,使用
plot_surface
方法绘制了表面图; - cmap参数控制了颜色映射,如上述代码中的值为
'cool'
,它使用了一系列蓝色和绿色的颜色,表示Z的值由低到高。 - alpha参数表示透明度。下面是这段代码生成的表面图。
改变表面图的颜色和添加网格线
改变表面图的颜色
在默认情况下,Matplotlib表面图的颜色是以z的大小值为基础产生的,因此颜色随z值的变化而变化。如果我们想改变表面图的颜色,就需要对plot_surface
函数进行修改,具体可以使用facecolors
和rstride、cstride
参数。
facecolors
参数:是一个(m,n,4)维的数组,表示了每个小方格或小三角面之间的颜色变化。这是一个用于表面表达力的参数,可以用来 模拟任意颜色的表面。我们可以将颜色值赋值给facecolors参数。-
rstride
、cstride
参数:表面图有各种各样的颜色和阴影,这些阴影使用平面替代,并使表面图看起来更具规律性,也不易出现混淆。rstride
、cstride
是控制行跨度和列跨度的参数。具体来说,他们控制了在曲面和x轴、y轴上的网格线的线数。如果把它们设为1,所有线都会显示。如果设置为2,则相应的线将被跳过。
下面是带有颜色和网格的示例代码
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 构造数据
X = np.arange(-5, 5, 0.1)
Y = np.arange(-5, 5, 0.1)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)
# 绘图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 修改颜色
colors = 0.8 * plt.cm.cool(Z / float(Z.max())) + 0.2 # 赋值颜色
ax.plot_surface(X, Y, Z, facecolors=colors, rstride=1, cstride=1, linewidth=0, antialiased=True)
# 添加网格
ax.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
ax.w_yaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
ax.w_zaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
plt.show()
代码说明:
cm
是Matplotlib库提供的一系列颜色映射对象,其中大多数都以字符串的形式存储,表示了颜色的范围(如’jet’、’rainbow’、’cool’等)。因此,我们可以根据Z的大小值,使用cm库中的任何颜色映射方法,产生颜色的数组。在这个例子中,我们使用了cool
颜色映射(如前面的例子),并将Z的值添加到映射中,以产生一个颜色数组;rstride
、cstride
参数控制行跨度和列跨度的网格线,在这个例子中都设置为1,即每个小方格和小三角面都有一条网格线,没有被跳过;linewidth
参数控制网格线的宽度,这里设置为0,表示线宽为0;antialiased
参数控制图像是否进行消除锯齿(抗锯齿),这里设置为True。
结论
在本文中,我们介绍了如何生成Python Matplotlib表面图,并且修改表面图的颜色并添加网格线。如果您使用Matplotlib绘制表面图,在此过程中如有需要,可以尝试本文所述的此方法。