Python 使用pandas在同一图表中生成多个散点矩阵图

Python 使用pandas在同一图表中生成多个散点矩阵图,python,pandas,Python,Pandas,我有两个列名称相同的数据帧。我想制作成对图散点图,以了解变量如何相互作用。我想用与第二个矩阵不同的颜色绘制第一个数据帧。这可能吗?默认情况下,scatter\u matrix函数会覆盖上一个绘图 为什么我的第一个生成的绘图会被覆盖?如何使用scatter\u matrix函数同时显示两个数据帧 import pandas as pd import numpy as np import matplotlib.pyplot as plt dat = pd.DataFrame({'x%i' % ii:

我有两个列名称相同的数据帧。我想制作成对图散点图,以了解变量如何相互作用。我想用与第二个矩阵不同的颜色绘制第一个数据帧。这可能吗?默认情况下,
scatter\u matrix
函数会覆盖上一个绘图

为什么我的第一个生成的绘图会被覆盖?如何使用
scatter\u matrix
函数同时显示两个数据帧

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
dat = pd.DataFrame({'x%i' % ii: np.random.uniform(-1, 1, 100) for ii in range(3)})
dat2 = pd.DataFrame({'x%i' % ii: np.random.uniform(0, 1, 100) for ii in range(3)})
ax = pd.plotting.scatter_matrix(dat, c='orange')
pd.plotting.scatter_matrix(dat2, c='k')
# pd.plotting.scatter_matrix(dat2, c='k', ax=ax) # results in error
plt.savefig('example')


(我想要的解决方案应该有两种不同的点颜色,一组从0到1,另一组从-1到1。)

中似乎存在一个问题,
scatter_matrix()
函数在技术上可以处理通过
ax=ax
选项传递的轴的2D数组,但是调用
图,axes=_子图(naxes=naxes,figsize=figsize,ax=ax,squence=False)
似乎将此轴数组展平为1D列表,随后在代码中与
ax=axs[i,j]
不兼容。也许应该为此创建一个bug

除此之外,我建议您编写自己的代码(松散地基于原始的
scatter\u matrix()
),以便更好地控制正在绘制的内容。 在以下示例中,您可以看到如何对实际打印的内容(例如图形大小和边距、打印对象的颜色等)进行更精确的控制:

收益率:


如果您愿意使用另一个名为
seaborn
的库,并且如果我理解正确,则可以轻松完成。您只需
concat
两个数据帧并创建一个列作为
hue
,并在图例中使用您想要的名称

import seaborn as sns
sns.pairplot(pd.concat([dat.assign(hue='dat'), 
                        dat2.assign(hue='dat2')]), 
             hue='hue', 
             diag_kind='hist', 
             palette=['orange', 'k'])


注意:在这种情况下,我发现直方图中的对角线看起来不太好,我宁愿使用
'kde'
而不是
'hist'
作为参数
diag_kind
,但这取决于您想要什么。

我运行了提供给我的代码。绘制了两个图形,顶部和底部,顶部用橙色绘制,底部用黑色绘制我是罗。
import seaborn as sns
sns.pairplot(pd.concat([dat.assign(hue='dat'), 
                        dat2.assign(hue='dat2')]), 
             hue='hue', 
             diag_kind='hist', 
             palette=['orange', 'k'])