首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一个图中绘制两个子图

在一个图中绘制两个子图
EN

Stack Overflow用户
提问于 2021-04-02 17:08:23
回答 1查看 219关注 0票数 0

我有两个PCA图:一个用于训练数据和测试测试。使用seaborn,我想将这两个结合起来,像子情节一样绘制。

代码语言:javascript
运行
复制
sns.FacetGrid(finalDf_test, hue="L", height=6).map(plt.scatter, 'PC1_test', 'PC2_test').add_legend()
sns.FacetGrid(finalDf_train, hue="L", height=6).map(plt.scatter, 'PC1_train', 'PC2_train').add_legend()

有人能帮上忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-02 19:33:56

FacetGrid是一个图形级函数,它根据其col=row=参数创建一个或多个子图。在这种情况下,只创建了一个子图。

由于FacetGrid只处理一个数据帧,因此您可以连接您的数据帧,引入一个新列来区分测试和训练。此外,两个数据帧的"PC1“和"PC2”列应该具有相同的名称。

一种更简单的方法是使用matplotlib创建图形,然后为每个子图调用sns.scatterplot(...., ax=...)。它看起来是这样的:

代码语言:javascript
运行
复制
from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd

# create some dummy data
l = np.random.randint(0,2,500)
p1 = np.random.rand(500)*10
p2 = p1 + np.random.randn(500) + l
finalDf_test = pd.DataFrame({'PC1_test': p1[:100], 'PC2_test': p2[:100], 'L':l[:100] })
finalDf_train = pd.DataFrame({'PC1_train': p1[100:], 'PC2_train': p2[100:], 'L':l[100:] })

sns.set()
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 6), sharex=True, sharey=True)
sns.scatterplot(data=finalDf_test, x='PC1_test', y='PC2_test', hue='L', ax=ax1)
sns.scatterplot(data=finalDf_train, x='PC1_train', y='PC2_train', hue='L', ax=ax2)
plt.show()

连接数据帧可能如下所示:

代码语言:javascript
运行
复制
sns.set()
finalDf_total = pd.concat({'test': finalDf_test.rename(columns={'PC1_test': 'PC1', 'PC2_test': 'PC2' }),
                          'train':finalDf_train.rename(columns={'PC1_train': 'PC1', 'PC2_train': 'PC2' })})
finalDf_total.index.rename(['origin', None], inplace=True) # rename the first index column to "origin"
finalDf_total.reset_index(level=0, inplace=True) # convert the first index to a regular column
sns.FacetGrid(finalDf_total, hue='L', height=6, col='origin').map(plt.scatter, 'PC1', 'PC2').add_legend()
plt.show()

例如,在lmplot中也可以使用相同的组合数据帧

代码语言:javascript
运行
复制
sns.lmplot(data=finalDf_total, x='PC1', y='PC2', hue='L', height=6, col='origin')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66916990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档