一、图形分区和布局
Python是一种强大的、易用的高级编程语言,自2003年发布以来,一直都在广泛的应用于数值计算、数据分析、科学计算、机器学习等相关领域。在Python的数据可视化中,Matplotlib是最为流行的数据绘图库之一。而其一个重要的功能就是plt.subplot实现的图形分区和布局。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
y = np.sin(x)
plt.subplot(2,2,1)
plt.plot(x,y)
plt.title('subplot(2,2,1)')
plt.subplot(2,2,2)
plt.plot(x,y)
plt.title('subplot(2,2,2)')
plt.subplot(2,2,3)
plt.plot(x,y)
plt.title('subplot(2,2,3)')
plt.subplot(2,2,4)
plt.plot(x,y)
plt.title('subplot(2,2,4)')
plt.show()
上述代码中,plt.subplot函数调用的第一个参数表示分区行数,第二个参数表示分区列数,第三个参数表示当前子图的索引编号。通过这个函数生成的图形,会被平均分割成行数乘以列数份区域,并按照从左到右、从上到下的顺序依次编号。关键的是,我们可以独立对每个子图进行设置,比如设置线条颜色、线条宽度、坐标轴标签等等。此外,也可以在子图上添加其它类型的图形元素,比如标注文本、箭头、网格线等。
二、绘制多个子图
为了绘制多个子图,我们可以使用plt.subplots函数。这个函数可以在一行中同时创建一个或多个子图对象。如果需要创建多行子图,可以使用先前提到的plt.subplot函数。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-np.pi,np.pi,100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots(nrows=2, ncols=1)
ax[0].plot(x, y1, color='b', linewidth=2.5)
ax[0].set_title('sin(x)', fontsize=16)
ax[1].plot(x, y2, color='r', linewidth=2.5)
ax[1].set_title('cos(x)', fontsize=16)
plt.tight_layout()
plt.show()
上述代码中,我们首先使用np.linspace函数生成一组-π到π的等分点,利用np.sin和np.cos函数生成对应的正弦和余弦函数值。然后我们使用plt.subplots函数创建两个子图对象,分别表示plt.subplot函数内第一行和第二行。之后对于每个子图对象,我们分别用ax数组存储并单独对其进行设置。也可以直接调用子图对象属性来设置子图样式,如标题、坐标轴标签等。需要注意的是,在多个子图对象内的元素设置仍然是基于单个Axes对象。如果需要对多个子图对象进行相同设置,也可以使用类似plt.title、plt.xlabel等的plt.XXX风格函数。
三、绘制极坐标图
极坐标图是一种特殊的数据可视化,其中数据点显示在平面内的极坐标系中。而plt.subplot函数同样可以用于创建和显示极坐标图。
import matplotlib.pyplot as plt
import numpy as np
theta = np.linspace(0,2*np.pi,100)
r = np.sin(3*theta)
ax = plt.subplot(111, projection='polar')
ax.plot(theta, r)
ax.set_rmax(1)
ax.set_rticks([0.25, 0.5, 0.75, 1])
ax.grid(True)
plt.title("polar plot")
plt.show()
上述代码中,我们首先定义theta和r数组,然后利用plt.subplot函数创建一个极坐标子图对象。为了使得极坐标显示更加美观,我们设置了rmax表示最大距离、rticks表示圆周距离之间的间隔、grid表示圆形网格线等。注意,在使用plt.subplot函数创建极坐标子图时,需要使用projection=’polar’设置投影方式为极坐标。
四、绘制3D图
在某些情况下,我们需要绘制数据点的三维坐标情况,这时候就需要使用3D图像。Matplotlib同样支持3D图绘制,也可以使用plt.subplot函数得到相应的3D子图。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5,5,100)
y = np.linspace(-5,5,100)
x,y = np.meshgrid(x,y)
r = np.sqrt(x**2+y**2)
z = np.sin(r)
ax.plot_surface(x, y, z, cmap='rainbow')
ax.set_zlim(-1,1)
plt.title("3D plot")
plt.show()
上述代码中,我们使用np.meshgrid函数生成xy平面上的坐标点数组,计算出对应的r值和z值。然后使用plt.subplot函数创建一个3D子图对象,设置其投影方式为实现3D图像。对于3D图像的制作,我们可以利用Axes3D对象并调用其plot_surface函数绘制空间曲面。需要注意的是,在绘制3D图像时还有一些特殊的方法,比如zlim、xlim、ylim等参数可以用于设置z轴范围和x、y平面范围,其他的参数就和二维图像绘制函数一致。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/245911.html