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

Python 在一个图中绘制两个子图,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我有两个PCA图:一个用于训练数据和测试。使用seaborn,我想把这两个元素结合起来,然后像子情节一样情节化 sns.FacetGrid(finalDf_test,hue=“L”,height=6).映射(plt.scatter,'PC1_test','PC2_test')。添加图例() sns.FacetGrid(finalDf_train,hue=“L”,height=6).map(plt.scatter,'PC1_train','PC2_train')。添加图例() 有人能帮忙吗?是一

我有两个PCA图:一个用于训练数据和测试。使用seaborn,我想把这两个元素结合起来,然后像子情节一样情节化

sns.FacetGrid(finalDf_test,hue=“L”,height=6).映射(plt.scatter,'PC1_test','PC2_test')。添加图例()
sns.FacetGrid(finalDf_train,hue=“L”,height=6).map(plt.scatter,'PC1_train','PC2_train')。添加图例()
有人能帮忙吗?

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

由于
FaceGrid
只在一个数据帧上工作,您可以连接数据帧,引入一个新列来区分测试和训练。此外,两个数据帧的“PC1”和“PC2”列应具有相同的名称

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

从matplotlib导入pyplot作为plt
导入seaborn作为sns
将numpy作为np导入
作为pd进口熊猫
#创建一些虚拟数据
l=np.random.randint(0,2500)
p1=np.随机兰特(500)*10
p2=p1+np.随机随机数n(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()
图(ax1,ax2)=plt.子批(ncols=2,figsize=(12,6),sharex=True,sharey=True)
散点图(数据=最终F_检验,x='PC1_检验',y='PC2_检验',色调='L',ax=ax1)
sns.散点图(数据=最终F列,x='PC1'列,y='PC2'列,色调='L',ax=ax2)
plt.show()

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

sns.set()
finalDf_total=pd.concat({'test':finalDf_test.rename(列={'PC1_test':'PC1','PC2_test':'PC2'}),
'train':finalDf_train.rename(列={'PC1_train':'PC1','PC2_train':'PC2'})
finalDf#u total.index.rename(['origin',None],inplace=True)#将第一个索引列重命名为“origin”
finalDf_total.reset_index(level=0,inplace=True)#将第一个索引转换为常规列
sns.FaceGrid(最终总计,色调=1',高度=6,颜色=origin').map(plt.scatter,'PC1','PC2')。添加图例()
plt.show()

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

sns.lmplot(数据=finalDf_总数,x='PC1',y='PC2',色调='L',高度=6,列='origin')
是一个图形级函数,根据其
列=
行=
参数创建一个或多个子图。在这种情况下,只创建一个子批次

由于
FaceGrid
只在一个数据帧上工作,您可以连接数据帧,引入一个新列来区分测试和训练。此外,两个数据帧的“PC1”和“PC2”列应具有相同的名称

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

从matplotlib导入pyplot作为plt
导入seaborn作为sns
将numpy作为np导入
作为pd进口熊猫
#创建一些虚拟数据
l=np.random.randint(0,2500)
p1=np.随机兰特(500)*10
p2=p1+np.随机随机数n(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()
图(ax1,ax2)=plt.子批(ncols=2,figsize=(12,6),sharex=True,sharey=True)
散点图(数据=最终F_检验,x='PC1_检验',y='PC2_检验',色调='L',ax=ax1)
sns.散点图(数据=最终F列,x='PC1'列,y='PC2'列,色调='L',ax=ax2)
plt.show()

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

sns.set()
finalDf_total=pd.concat({'test':finalDf_test.rename(列={'PC1_test':'PC1','PC2_test':'PC2'}),
'train':finalDf_train.rename(列={'PC1_train':'PC1','PC2_train':'PC2'})
finalDf#u total.index.rename(['origin',None],inplace=True)#将第一个索引列重命名为“origin”
finalDf_total.reset_index(level=0,inplace=True)#将第一个索引转换为常规列
sns.FaceGrid(最终总计,色调=1',高度=6,颜色=origin').map(plt.scatter,'PC1','PC2')。添加图例()
plt.show()

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

sns.lmplot(数据=finalDf_总数,x='PC1',y='PC2',色调='L',高度=6,列='origin')

下面的“ValueError:zero size array to reduction operation minimum,它没有标识”是我执行的代码,但它的抛出错误。sns.set()图(ax1,ax2)=plt.subplot(ncols=2,figsize=(12,6),sharex=True,sharey=True)sns.scatterplot(data=finalDf_test,x='PC1_test',y='PC2_test',hue='L',ax ax ax1)sns.scatterplt(data=finalDf train,x='PC1_train',y='PC2_train',hue='L',ax ax ax ax2)plt.show()您是否运行最新的seaborn(0.11.1.1.1.1)和pandas(1.2.3)版本?您的旧代码是否可以处理这些相同的数据帧?我的代码和测试数据在您的计算机上工作吗?你能回答你的问题并添加完整的错误跟踪(作为文本)吗?我得到的“ValueError:zero size array to reduction operation minimum what no identity”是我执行的代码,但它的抛出错误。sns.set()图(ax1,ax2)=plt.subplot(ncols=2,figsize=(12,6),sharex=True,sharey=True)sns.scatterplot(data=finalDf_test,x='PC1_test',y='PC2_test',hue='L',ax ax ax1)sns.scatterplt(data=finalDf train,x='PC1_train',y='PC2_train',hue='L',ax ax ax ax2)plt.show()您是否运行最新的seaborn(0.11.1.1.1.1)和pandas(1.2.3)版本?您的旧代码是否可以处理这些相同的数据帧?我的代码和测试数据在您的计算机上工作吗?您能否回答您的问题并添加完整的错误跟踪(作为文本)?