使用Python可视化

各种可视化方法

本文将介绍几种常见的可视化方法。

1. 三维曲面图(3D Surface Plot)

三维曲面图适合展示两个参数对结果的影响,第三个参数固定。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 示例数据
lambda1 = np.linspace(1, 5, 10)
lambda2 = np.linspace(0.2, 0.8, 10)
lambda1_grid, lambda2_grid = np.meshgrid(lambda1, lambda2)
accuracy = 70 + 5 * np.exp(-((lambda1_grid-3)**2 + (lambda2_grid-0.5)**2))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(lambda1_grid, lambda2_grid, accuracy, cmap='viridis')

ax.set_xlabel('$\lambda_1$')
ax.set_ylabel('$\lambda_2$')
ax.set_zlabel('Accuracy (%)')
ax.set_title('3D Surface Plot of Parameter Sensitivity Analysis')

plt.show()

2. 四维散点图(4D Scatter Plot)

四维散点图使用颜色和点的大小同时表示两个参数的变化。

import numpy as np
import matplotlib.pyplot as plt

# 示例数据
lambda1 = np.linspace(1, 5, 10)
lambda2 = np.linspace(0.2, 0.8, 10)
lambda3 = np.linspace(1, 3, 10)
lambda1_grid, lambda2_grid, lambda3_grid = np.meshgrid(lambda1, lambda2, lambda3)
accuracy = 70 + 5 * np.exp(-((lambda1_grid-3)**2 + (lambda2_grid-0.5)**2)) + lambda3_grid

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 展示点的颜色和大小
scatter = ax.scatter(lambda1_grid, lambda2_grid, accuracy, c=lambda3_grid, s=(lambda3_grid - lambda3.min())*100, cmap='viridis')
fig.colorbar(scatter, ax=ax, label='$\lambda_3$')

ax.set_xlabel('$\lambda_1$')
ax.set_ylabel('$\lambda_2$')
ax.set_zlabel('Accuracy (%)')
ax.set_title('Parameter Sensitivity Analysis with $\lambda_3$')

plt.show()

3. 多维热图(Multi-dimensional Heatmap)

多维热图使用多个热图展示不同(\lambda_3)值的情况下,(\lambda_1)和(\lambda_2)对性能的影响。

import numpy as np
import matplotlib.pyplot as plt

# 示例数据
lambda1 = np.linspace(1, 5, 10)
lambda2 = np.linspace(0.2, 0.8, 10)
lambda3 = np.array([1, 2, 3])
lambda1_grid, lambda2_grid = np.meshgrid(lambda1, lambda2)

fig, axes = plt.subplots(1, len(lambda3), figsize=(18, 5))

for i, l3 in enumerate(lambda3):
    accuracy = 70 + 5 * np.exp(-((lambda1_grid-3)**2 + (lambda2_grid-0.5)**2)) + l3
    c = axes[i].contourf(lambda1_grid, lambda2_grid, accuracy, levels=20, cmap='viridis')
    fig.colorbar(c, ax=axes[i])
    axes[i].set_title(f'$\lambda_3$ = {l3}')
    axes[i].set_xlabel('$\lambda_1$')
    axes[i].set_ylabel('$\lambda_2$')

plt.tight_layout()
plt.show()

4. 平行坐标图(Parallel Coordinates Plot)

平行坐标图展示高维数据的模式。

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import parallel_coordinates

# 示例数据
data = {
    'lambda1': np.random.choice(np.linspace(1, 5, 10), 100),
    'lambda2': np.random.choice(np.linspace(0.2, 0.8, 10), 100),
    'lambda3': np.random.choice(np.linspace(1, 3, 10), 100),
    'accuracy': 70 + 5 * np.exp(-((np.random.choice(np.linspace(1, 5, 10), 100)-3)**2 + (np.random.choice(np.linspace(0.2, 0.8, 10), 100)-0.5)**2)) + np.random.choice(np.linspace(1, 3, 10), 100)
}
df = pd.DataFrame(data)

plt.figure(figsize=(10, 6))
parallel_coordinates(df, class_column='accuracy', cols=['lambda1', 'lambda2', 'lambda3'], color=plt.cm.viridis(np.linspace(0, 1, len(df))))
plt.title('Parameter Sensitivity Analysis')
plt.xlabel('Parameters')
plt.ylabel('Value')
plt.grid(True)
plt.show()

5. 雷达图(Radar Chart)

雷达图展示多个参数对性能的影响。

import numpy as np
import matplotlib.pyplot as plt

# 示例数据
labels = ['lambda1', 'lambda2', 'lambda3']
num_vars = len(labels)

# 创建一个数据集
angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist()
angles += angles[:1]

fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))

# 参数组合示例
param_combinations = [
    [1, 0.2, 1],
    [2, 0.4, 2],
    [3, 0.6, 3]
]

# 计算性能
for params in param_combinations:
    values = [params[0], params[1], params[2]]
    values += values[:1]
    accuracy = 70 + 5 * np.exp(-((params[0]-3)**2 + (params[1]-0.5)**2)) + params[2]
    ax.fill(angles, values, label=f'Accuracy: {accuracy:.2f}')
    ax.plot(angles, values)

ax.set_yticklabels([])
ax.set_xticks(angles[:-1])
ax.set_xticklabels(labels)
plt.legend(loc='upper right', bbox_to_anchor=(1.3, 1.1))
plt.show()

6. 交互式可视化工具(如Plotly)

使用Plotly创建交互式的三维散点图,可以旋转、缩放和悬停查看具体数值。

import plotly.express as px
import pandas as pd
import numpy as np

# 示例数据
lambda1 = np.linspace(1, 5, 10)
lambda2 = np.linspace(0.2, 0.8, 10)
lambda3 = np.linspace(1, 3, 10)
lambda1_grid, lambda2_grid, lambda3_grid = np.meshgrid(lambda1, lambda2, lambda3)
accuracy = 70 + 5 * np.exp(-((lambda1_grid-3)**2 + (lambda2_grid-0.5)**2)) + lambda3_grid

# 转换为一维数据
df = pd.DataFrame({
    'lambda1': lambda1_grid.ravel(),
    'lambda2': lambda2_grid.ravel(),
    'lambda3': lambda3_grid.ravel(),
    'accuracy': accuracy.ravel()
})

fig = px.scatter_3d(df, x='lambda1', y='lambda2', z='accuracy', color='lambda3', size='lambda3', title='Parameter Sensitivity Analysis')
fig.show()

7. 等高线图(Contour Plot)

等高线图展示两个参数的组合效果,第三个参数用颜色表示。

import numpy as np
import matplotlib.pyplot as plt

# 示例数据
lambda1 = np.linspace(1, 5, 10)
lambda2 = np.linspace(0.2, 0.8, 10)
lambda3 = np.linspace(1, 3, 5)
lambda1_grid, lambda2_grid, lambda3_grid = np.meshgrid(lambda1, lambda2, lambda3)

fig, axes = plt.subplots(1, len(lambda3), figsize=(18, 5))

for i, l3 in enumerate(lambda3):
    accuracy = 70 + 5 * np.exp(-((lambda1_grid-3)**2 + (lambda2_grid-0.5)**2)) + l3
    c = axes[i].contourf(lambda1, lambda2, accuracy[:,:,i], levels=20, cmap='viridis')
    axes[i].set_title(f'$\lambda_3$ = {l3}')
    axes[i].set_xlabel('$\lambda_1$')
    axes[i].set_ylabel('$\lambda_2$')
    fig.colorbar(c, ax=axes[i])

plt.tight_layout()
plt.show()

8. 小提琴图(Violin Plot)

小提琴图展示不同参数组合对性能分布的影响。

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

# 示例数据
data = {
    'lambda1': np.random.choice(np.linspace(1, 5, 10), 100),
    'lambda2': np.random.choice(np.linspace(0.2, 0.8, 10), 100),
    'lambda3': np.random.choice(np.linspace(1, 3, 10), 100),
    'accuracy': 70 + 5 * np.exp(-((np.random.choice(np.linspace(1, 5, 10), 100)-3)**2 + (np.random.choice(np.linspace(0.2, 0.8, 10), 100)-0.5)**2)) + np.random.choice(np.linspace(1, 3, 10), 100)
}
df = pd.DataFrame(data)

plt.figure(figsize=(12, 6))
sns.violinplot(x='lambda1', y='accuracy', hue='lambda3', data=df, split=True, palette='viridis')
plt.title('Violin Plot of Parameter Sensitivity Analysis')
plt.xlabel('$\lambda_1$')
plt.ylabel('Accuracy (%)')
plt.grid(True)
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值