包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!
用Python绘制高质量图表
- 我们将以一组随机生成的数据为例,逐步优化绘图效果。目标是实现一个带分类标签的3D散点图,并导出为高清矢量图。
1.生成数据与基础绘图
import numpy as np
import matplotlib.pyplot as plt
# 生成随机数据矩阵
n_samples = 1024
n_features = 3
# 均值、标准差、峰度
feature_matrix = np.random.rand(n_samples, n_features)
# 基础3D绘图(初阶版)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(feature_matrix[:, 0], feature_matrix[:, 1], feature_matrix[:, 2])
plt.show()
效果:散点堆砌一团,无颜色区分,坐标轴标签缺失,整体缺乏信息量(类似图1)。
2.进阶优化:分类标签与样式调整
# 设置分类标签和颜色
target_names = ['Health', 'Broken', 'Unknown']
colors = ['blue', 'red', 'green']
# 随机分配样本类别(模拟真实数据)
np.random.seed(42)
targets = np.random.choice([0, 1, 2], size=n_samples)
# 创建画布并绘图
fig = plt.figure(figsize=(12, 8), dpi=150)
ax = fig.add_subplot(111, projection='3d')
# 按类别绘制散点
for i in range(3):
mask = (targets == i)
ax.scatter(feature_matrix[mask, 0],
feature_matrix[mask, 1],
feature_matrix[mask, 2],
c=colors[i],
label=target_names[i],
s=50,
# 点大小
alpha=0.8,
# 透明度
edgecolor='w') # 边缘颜色
# 添加标签和样式调整
ax.set_xlabel('$\mu$ (Mean)', fontsize=14, labelpad=15) # LaTeX公式支持
ax.set_ylabel('$\sigma$ (Std)', fontsize=14, labelpad=15)
ax.set_zlabel('$\kappa$ (Kurtosis)', fontsize=14, labelpad=15)
ax.set_title('Feature Matrix Visualization', fontsize=16, pad=20)
# 设置坐标轴范围和网格
ax.set_xlim(feature_matrix[:, 0].min(), feature_matrix[:, 0].max())
ax.set_ylim(feature_matrix[:, 1].min(), feature_matrix[:, 1].max())
ax.set_zlim(feature_matrix[:, 2].min(), feature_matrix[:, 2].max())
ax.grid(True, linestyle='--', alpha=0.6)
# 添加图例并调整视角
ax.legend(loc='upper left', fontsize=12
ax.view_init(elev=20, azim=45) # 调整3D视角
plt.tight_layout()``plt.show()
优化效果:
- 散点按类别颜色区分,边缘清晰
- 坐标轴使用LaTeX公式字体
- 网格线为虚线,提升层次感
- 视角调整后,数据分布更直观(类似图2)。
3.终极技巧:导出高清矢量图
# 配置全局字体(需系统安装LaTeX)
plt.rcParams.update({"text.usetex": True,
# 启用LaTeX渲染
"font.family": "serif",
# 使用衬线字体
"font.serif": ["Times New Roman"]})
# 导出为PDF(矢量格式,无限放大不模糊)
fig.savefig('feature_matrix.pdf',
bbox_inches='tight',pad_inches=0.1,transparent=True) # 透明背景,便于论文嵌入
# 导出为PNG(高清位图)
fig.savefig('feature_matrix.png',
dpi=300,
# 分辨率
facecolor='white') # 背景填充白色
总结与建议
- 全局样式统:通过"plt.rcParams"配置字体、颜色主题,避免重复设置。
- 善用LaTeX公式:坐标轴标签中的数学符号能大幅提升图表专业度。
- 矢量格式优先:论文或报告中使用PDF/EPS格式,确保缩放不失真。
- 3D绘图慎用:若需印刷,可转为多视图2D图(如Seaborn的"pairplot")。
4.用Seaborn增添美观
- 由于Seaborn本身不支持3D绘图,我们可以结合Matplotlib的3D功能,同时利用Seaborn的样式和调色板。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 生成随机数据矩阵
n_samples = 1024
n_features = 3 # 均值、标准差、峰度
feature_matrix = np.random.rand(n_samples, n_features)
# 将数据转换为DataFram
df = pd.DataFrame(feature_matrix, columns=['Mean', 'Std', 'Kurtosis'])
# 随机分配样本类别(模拟真实数据)
np.random.seed(42)
df['Target'] = np.random.choice(['Health', 'Broken', 'Unknown'], size=n_samples)
# 基础散点图(初阶版)
sns.scatterplot(data=df, x='Mean', y='Std', hue='Target')
plt.show()
from mpl_toolkits.mplot3d
import Axes3D
# 设置Seaborn主题和调色板
sns.set_theme(style="whitegrid", palette="deep")
# 创建画布并绘图
fig = plt.figure(figsize=(12, 8), dpi=150)
ax = fig.add_subplot(111, projection='3d')
# 按类别绘制散点
for i, target in enumerate(df['Target'].unique()):
mask = (df['Target'] == target)ax.scatter(df.loc[mask, 'Mean'],
df.loc[mask, 'Std'],
df.loc[mask, 'Kurtosis'],
label=target,
s=50, # 点大小
alpha=0.8, # 透明度
edgecolor='w') # 边缘颜色
# 添加标签和样式调整
ax.set_xlabel('$\mu$ (Mean)', fontsize=14, labelpad=15) # LaTeX公式支持
ax.set_ylabel('$\sigma$ (Std)', fontsize=14, labelpad=15)
ax.set_zlabel('$\kappa$ (Kurtosis)', fontsize=14, labelpad=15)
ax.set_title('Feature Matrix Visualization', fontsize=16, pad=20)
# 设置坐标轴范围和网格
ax.set_xlim(df['Mean'].min(), df['Mean'].max())
ax.set_ylim(df['Std'].min(), df['Std'].max())
ax.set_zlim(df['Kurtosis'].min(), df['Kurtosis'].max())
ax.grid(True, linestyle='--', alpha=0.6)
# 添加图例并调整视角
ax.legend(loc='upper left', fontsize=12)
ax.view_init(elev=20, azim=45) # 调整3D视角
plt.tight_layout()
plt.show()
优化效果:
- 散点按类别颜色区分,边缘清晰
- 坐标轴使用LaTeX公式字体
- 网格线为虚线,提升层次感
- 视角调整后,数据分布更直观(类似图2)。
总结与建议
- Seaborn主题统一:通过"sns.set_theme()"配置全局样式,避免重复设置。
- 结合Matplotlib:Seaborn虽不支持3D绘图,但可与Matplotlib无缝结合,发挥各自优势。
- 善用LaTeX公式:坐标轴标签中的数学符号能大幅提升图表专业度。
- 矢量格式优先:论文或报告中使用PDF/EPS格式,确保缩放不失真。
总结
- 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!
文末福利
- 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!
- ① Python所有方向的学习路线图,清楚各个方向要学什么东西
- ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
- ③ 100多个Python实战案例,学习不再是只会理论
- ④ 华为出品独家Python漫画教程,手机也能学习