以下是关于Matplotlib绘制雷达图和三维图的完整攻略,包括两个示例。
绘制雷达图
雷达图也称为极坐标图,用于展示多个变量之间的关系。Matplotlib提供了matplotlib.pyplot.polar
函数用于绘制雷达图。以下是绘制雷达图的示例代码:
import numpy as np
import matplotlib.pyplot as plt
# 数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [4, 3, 2, 5, 1]
# 计算角度
N = len(categories)
angles = [i / float(N) * 2 * np.pi for i in range(N)]
angles += angles[:1]
# 绘图
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.plot(angles, values, 'o-', linewidth=2)
ax.fill(angles, values, alpha=0.25)
ax.set_thetagrids(np.degrees(angles), categories)
ax.set_title('Radar Chart', fontsize=20)
plt.show()
上面的代码使用了matplotlib.pyplot.polar
函数绘制了一个简单的雷达图。首先定义了数据categories
和values
,然后计算了每个变量对应的度angles
。接着使用ax.plot
函数绘制了雷达图的线条,使用ax.fill
函数填充了雷达图的区域。最后使用ax.set_thetagrids
函数设置了刻度标签和ax.set_title
函数设置了图表标题。
以下是另一个绘制雷达图的示例代码,展示如何绘制多个数据系列的雷达图:
import numpy as np
import matplotlib.pyplot as plt
# 数据
categories = ['A', 'B', 'C', 'D', 'E']
values1 = [4, 3, 2, 5, 1]
values2 = [2, 5, 1, 4, 3]
# 计算角度
N = len(categories)
angles = [i / float(N) * 2 * np.pi for i in range(N)]
angles += angles[:1]
# 绘图
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.plot(angles, values1, 'o-', linewidth=2, label='Series 1')
ax.fill(angles, values1, alpha=0.25)
ax.plot(angles, values2, 'o-', linewidth=2, label='Series 2')
ax.fill(angles, values2, alpha=0.25)
ax.set_thetagrids(np.degrees(angles), categories)
ax.legend(loc='upper right')
ax.set_title('Radar Chart', fontsize=20)
plt.show()
上面的代码在第一个示例的基础上增加了一个数据系列values2
,使用ax.plot
函数绘制了两个数据系列的雷达图使用ax.legend
函数添加了图例。
绘制三维图
Matplotlib也支持绘制三维图,包括散点图、曲面、等高线图等。以下是绘制三维散点图和曲面图的示例代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 生成数据
np.random.seed(1)
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n)
# 绘制三维散点图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c='r', marker='o')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
# 绘制三维曲面图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X, Y = np.meshgrid(np.arange(-1, 1, 0.1), np.arange(-1, 1, 0.1))
Z = np.sin(np.sqrt(X**2 + Y**2))
ax.plot_surface(X, Y, Z, cmap='coolwarm')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
上面的代码使用了mpl_toolkits.mplot3d
模块中的Axes3D
类绘制了三维散点图和曲面图。在绘制三维散点图时,使用ax.scatter
函数绘制了散点图,并使用ax.set_xlabel
、ax.set_ylabel和
ax.set_zlabel函数设置了坐标轴标签。在绘制三维曲面图时,使用
np.meshgrid函数了网格点坐标,使用
ax.plot_surface函数绘制了曲面图,并使用
ax.set_xlabel、
ax.set_ylabel和
ax.set_zlabel`函数设置了坐标轴标签。
以上是使用Matplotlib绘制雷图和三维图的示例代码和详细说明。在实际使用中,可以根据需要调整参数和样式,绘制出更加美和有效的图表。