代码功能
上述代码使用 matplotlib
和 seaborn
生成四种不同的统计图,具体如下:
- 玫瑰图:在极坐标上绘制柱状图,展示不同角度的数值分布。
- 雷达图:绘制多维数据的雷达图,用于对比不同维度的数值。
- 热力图:生成颜色深浅对应数值大小的二维热力图。
- 3D 曲面图:在三维空间中绘制曲面,展示数据的三维分布。
每种图表都使用随机生成的假数据进行可视化。
代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from mpl_toolkits.mplot3d import Axes3D# 设置样式
sns.set(style="whitegrid")# 生成假数据
np.random.seed(42)
angles = np.linspace(0, 2 * np.pi, 8, endpoint=False).tolist()
values = np.random.randint(5, 20, size=8).tolist()
values += values[:1] # 闭合雷达图
angles += angles[:1]# 1. 玫瑰图 (Polar or Rose Chart)
fig, axs = plt.subplots(2, 2, figsize=(15, 12))
ax = axs[0, 0]
theta = np.linspace(0, 2 * np.pi, 30)
r = np.abs(np.sin(2 * theta) * np.cos(3 * theta) * 10)
ax = plt.subplot(221, polar=True)
bars = ax.bar(theta, r, color=plt.cm.viridis(r / max(r)), alpha=0.8)
ax.set_title("Rose Chart")# 2. 雷达图 (Radar Chart)
ax = axs[0, 1]
ax = plt.subplot(222, polar=True)
ax.plot(angles, values, linewidth=2, linestyle='solid', color="teal")
ax.fill(angles, values, color="teal", alpha=0.3)
ax.set_yticklabels([])
ax.set_xticks(angles[:-1])
ax.set_xticklabels(['Metric 1', 'Metric 2', 'Metric 3', 'Metric 4', 'Metric 5', 'Metric 6', 'Metric 7', 'Metric 8'])
ax.set_title("Radar Chart")# 3. 热力图 (Heatmap)
data = np.random.rand(10, 10) # 生成随机热力图数据
sns.heatmap(data, cmap="YlGnBu", ax=axs[1, 0])
axs[1, 0].set_title("Heatmap")# 4. 3D 曲面图 (3D Surface Plot)
ax = fig.add_subplot(224, projection='3d')
X = np.linspace(-5, 5, 50)
Y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X**2 + Y**2))
surf = ax.plot_surface(X, Y, Z, cmap='viridis')
fig.colorbar(surf, ax=ax, shrink=0.5, aspect=5)
ax.set_title("3D Surface Plot")# 调整布局
plt.tight_layout()
plt.show()