matplotlib绘制统计特征图,分布特征图和降维分析散点图

一、统计特征图绘制

1.需求

我现在有两个数据集Pdata和Cdata分别在DataFrame对象中,我现在想对这两个数据集进行统计特征分析,并用直方图展示出来。

2.代码

方法一

# 查看提取数据的统计特征
p1 = Pdata.describe()
c1 = Cdata.describe()
# 绘制指标
metrics = ['mean', 'std', '25%', '50%', '75%']
# 创建一个包含3行和2列的子图布局,每个子图的大小为 (20, 12)
# 这里的axes是一个3×2的数组,里面存放的是Axes对象,可以理解为画布上的一块区域,您可以在这个区域上绘制各种图形
fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(20, 12))
for i, metric in enumerate(metrics):
    row = i // 2
    col = i % 2
    # 绘制出p1的一个条形图
    # 第一个参数:柱子在x轴上的坐标,即每个条形图的横坐标位置,类数组结构。
	# 第二个参数:柱子的高度,即每个条形图的高度,类数组结构。
    # width=0.4控制柱状图的宽度,alpha=0.7控制柱状图的透明度。
    axes[row, col].bar(range(len(p1.columns)), p1.loc[metric], width=0.4, label='p1', alpha=0.7)
    # 绘制出c1的一个条形图,为了避免两组柱状图重叠,我们将第二组柱状图的位置平移了0.4个单位
    axes[row, col].bar([j + 0.4 for j in range(len(c1.columns))], c1.loc[metric], width=0.4, label='c1', alpha=0.7)
    # 设置 x 轴刻度的位置
    axes[row, col].set_xticks([j + 0.2 for j in range(len(p1.columns))])
    # 设置x轴的刻度标签,进行了45度旋转和右对齐
    axes[row, col].set_xticklabels(range(1, len(p1.columns) + 1), rotation=45, ha='right')
    # 添加图例
    axes[row, col].legend()
    axes[row, col].set_title(metric)
# 自动调整子图布局,使它们适应整个图形区域,同时避免重叠和裁剪
plt.tight_layout()
plt.savefig('metrics.png')

在这里插入图片描述

方法二

metrics = ['mean', 'std', '25%', '50%', '75%']
# 创建一个新的空白画布
plt.figure(figsize=(19, 10))
for i, metric in enumerate(metrics):
	# 在当前画布中创建一个子图,3行2列的布局,当前子图的位置由 i+1 指定
    plt.subplot(3, 2, i + 1)
    plt.bar(range(len(p1.columns)), p1.loc[metric], width=0.4, label='p1', alpha=0.7)
    plt.bar([j + 0.4 for j in range(len(c1.columns))], c1.loc[metric], width=0.4, label='c1', alpha=0.7)
    plt.xticks(ticks=[j + 0.2 for j in range(len(p1.columns))], labels=range(1, len(p1.columns) + 1), rotation=45, ha='right')
    plt.legend()
    plt.title(metric)
plt.tight_layout()
plt.savefig('metrics.png')

在这里插入图片描述

总结

这两种方法都可以用来画子图,但它们的使用方式略有不同,适用于不同的情况:

  1. 方法一

    • 这种方式是一次性创建一个包含多个子图的画布,并返回一个包含所有子图的Axes对象数组。
    • 这种方法适合需要同时处理多个子图的情况,可以更方便地对所有子图进行操作,例如调整子图之间的间距、设置共享轴等。
  2. 方法二

    • 这种方式是先创建一个空白画布,然后在循环中逐个添加子图。
    • 这种方法适合需要在每个子图之间进行个性化设置或处理的情况,例如设置不同子图的标题、颜色等。

总体来说,方法一适用于需要创建多个子图且希望一次性处理它们的情况,而方法二适用于需要逐个处理子图或对子图进行个性化设置的情况。

二、分布特征图绘制

1.需求

我现在有两个数据集Pdata和Cdata分别在DataFrame对象中,我现在想对这两个数据集进行分布特征分析,即各个数据段的密度分析,并用直方图展示出来。

2.代码

cols_to_plot1 = ['feature_0', 'feature_1', 'feature_2', 'feature_3', 'feature_4', 'feature_5', 'feature_6', 'feature_7', 'feature_8']
plt.figure(figsize=(19, 10))
for i, col in enumerate(cols_to_plot1):
    plt.subplot(3, 3, i+1)
    # 绘制数据的分布情况,bins指定了直方图的箱数,stat='density'参数用于指定绘制的统计信息是归一化的密度而不是数量
    sns.histplot(Pdata[col], bins=15, label='p1', stat='density')
    sns.histplot(Cdata[col], bins=15, label='c1', stat='density')
    plt.legend()
plt.tight_layout()
plt.savefig('feature.png')

在这里插入图片描述

三、降维分析

1.需求

我现在有两个数据集Pdata和Cdata分别在DataFrame对象中,但是这两个数据集有很多通道(变量),不利于做整体可视化分析,我需要将这两个数据降维到二维,然后利用散点图观察他们的分布特性

2.PCA降维代码

# 将两个数据集合并
combined_df = pd.concat([Pdata, Cdata], axis=0)
# 创建一个 PCA 模型,设置主成分个数为 2
pca = PCA(n_components=2)
# 对合并后的数据集进行主成分分析
pca_result = pca.fit_transform(combined_df)
# 将转换后的数据分开
pca_df1 = pd.DataFrame(pca_result[:len(data_to_analyze)], columns=['PC1', 'PC2',])
pca_df2 = pd.DataFrame(pca_result[len(data_to_analyze):], columns=['PC1', 'PC2',])
# 绘制散点图
plt.figure(figsize=(19, 10))
plt.scatter(pca_df1['PC1'], pca_df1['PC2'], label='pattern', color='blue', marker='o', alpha=0.3)
plt.scatter(pca_df2['PC1'], pca_df2['PC2'], label='both', color='red', marker='x', alpha=0.3)
# 设置坐标轴标签
plt.xlabel('X Label')
plt.ylabel('Y Label')
plt.legend()
plt.title('PCA Visualization')
plt.savefig('pca.png')

在这里插入图片描述

3.t-SNE降维代码

combined_df = pd.concat([data_to_analyze, correct_to_analyze, error_to_analyze], axis=0)
tsne = TSNE(n_components=2)
tsne_result = tsne.fit_transform(combined_df)

# 将转换后的数据分开
tsne_df1 = pd.DataFrame(tsne_result[:len(data_to_analyze)], columns=['TSNE1', 'TSNE2'])
tsne_df2 = pd.DataFrame(tsne_result[len(data_to_analyze):len(data_to_analyze)+len(correct_to_analyze)], columns=['TSNE1', 'TSNE2'])
tsne_df3 = pd.DataFrame(tsne_result[len(data_to_analyze)+len(correct_to_analyze):], columns=['TSNE1', 'TSNE2'])

# 绘制散点图
plt.figure(figsize=(19, 10))
plt.scatter(tsne_df1['TSNE1'], tsne_df1['TSNE2'], label='pattern', marker='o')
plt.scatter(tsne_df2['TSNE1'], tsne_df2['TSNE2'], label='both', marker='x', alpha=0.4)
plt.scatter(tsne_df3['TSNE1'], tsne_df3['TSNE2'], label='error', marker='*', alpha=0.1)

# 设置坐标轴标签
plt.xlabel('X Label')
plt.ylabel('Y Label')
plt.legend()
plt.title('t-SNE Visualization')
plt.savefig('tsne.png')

在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCA降维散点图可视化是两个不同的概念。PCA降维是一种常用的数据降维方法,通过线性变换将高维数据映射到低维空间,以减少数据维度并保留最重要的信息。 在进行PCA降维后,可以使用散点图来可视化数据散点图可以帮助我们直观地观察数据分布和聚类情况。一般情况下,我们会使用降维后的数据的前两个主成分作为散点图的x轴和y轴,然后使用不同颜色或形状来表示不同的类别或聚类结果。 以下是使用PCA降维散点图可视化的示例代码: ```python from sklearn.decomposition import PCA import matplotlib.pyplot as plt # 假设X是原始数据 pca = PCA(n_components=2) # 选择降维后的维度为2 X_pca = pca.fit_transform(X) # 进行PCA降维 # 假设kpredictions是聚类结果或类别标签 plt.scatter(X_pca[:, 0], X_pca[:, 1], c=kpredictions) # 使用散点图可视化降维后的数据 plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') plt.title('PCA Scatter Plot') plt.show() ``` 上述代码中,使用sklearn库中的PCA类进行降维,将原始数据X降维到2维。然后使用matplotlib库中的scatter函数绘制散点图,其中参数c表示散点的颜色,可以根据聚类结果或类别标签进行设置。最后设置x轴和y轴的标签和标题,并使用plt.show()显示散点图。 请注意,这只是一个示例代码,具体的实现可能根据您的数据和需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值