本文通过Python实现的3个复杂可视化案例,每个案例均有数据和代码供大家学习使用。
包含编程资料、学习路线图、源代码、软件安装包等!【点进这里免费领取】!
3D曲面图(带等高线投影)
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
# 设置随机种子
np.random.seed(2025)
# 生成数据
X = np.linspace(-5, 5, 100)
Y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X**2 + Y**2)) + np.random.normal(0, 0.1, X.shape)
# 可视化
fig = plt.figure(figsize=(14, 8))
ax = fig.add_subplot(111, projection='3d')
# 绘制3D曲面
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
linewidth=0, antialiased=True,
rstride=2, cstride=2)
# 添加等高线投影
ax.contour(X, Y, Z, 20, zdir='z', offset=-2,
cmap=cm.coolwarm, linestyles='dashed')
# 设置颜色条
fig.colorbar(surf, shrink=0.5, aspect=10)
# 美化设置
ax.set_xlabel('X Axis', fontsize=12, labelpad=15)
ax.set_ylabel('Y Axis', fontsize=12, labelpad=15)
ax.set_zlabel('Z Axis', fontsize=12, labelpad=15)
ax.set_title('3D Surface with Contour Projection',
fontsize=16, pad=20)
plt.show()
通过meshgrid
生成三维坐标,结合plot_surface
和contour
实现立体与平面投影的叠加,coolwarm
色系增强数据对比。
多维特征热力图(带聚类树)
import seaborn as sns
from scipy.cluster import hierarchy
# 生成多维数据
np.random.seed(2025)
data = np.random.rand(10, 12) # 10个样本×12个特征
columns = [f'Feature_{i}'for i in range(1,13)]
# 计算聚类树
Z = hierarchy.linkage(data.T, method='ward')
# 创建画布
fig = plt.figure(figsize=(14, 10))
grid = plt.GridSpec(2, 2, hspace=0.1, wspace=0.1)
# 绘制树状图
ax1 = fig.add_subplot(grid[0, 0])
hierarchy.dendrogram(Z, orientation='left', labels=columns)
ax1.set_xticks([])
# 绘制热力图
ax2 = fig.add_subplot(grid[1, 0])
sns.heatmap(data, cmap='viridis', annot=True,
cbar_kws={'label': 'Value Intensity'},
yticklabels=[f'Sample_{i}'for i in range(1,11)])
# 添加分布图
ax3 = fig.add_subplot(grid[:, 1])
sns.violinplot(data=data, palette='Set3', inner="quartile")
ax3.set_xticklabels(columns, rotation=45)
plt.suptitle('Multi-dimensional Feature Analysis', y=0.95)
plt.show()
整合树状图、热力图和小提琴图,实现多维数据的聚类分析与分布展示,viridis
色系保证颜色辨识度。
极坐标动态玫瑰图
# 生成周期性数据
np.random.seed(2025)
theta = np.linspace(0, 2*np.pi, 8)
values = np.abs(np.random.randn(8)) * 50
# 极坐标设置
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111, polar=True)
bars = ax.bar(theta, values, width=0.5,
color=np.random.rand(8,3), alpha=0.8)
# 添加动态旋转效果
def rotate(i):
ax.set_theta_offset(i/10)
return bars
ani = FuncAnimation(fig, rotate, frames=100,
interval=50)
plt.title('Dynamic Polar Rose Diagram')
plt.show()
极坐标系结合动态旋转,适合展示周期性数据特征。
完整代码及可视化效果可通过Jupyter Notebook分步执行,建议调整色系参数(如cmap
)和布局参数(如figsize
)获得最佳展示效果。