Python 如何从散射矩阵中获取数据数组

Python 如何从散射矩阵中获取数据数组,python,pandas,matplotlib,Python,Pandas,Matplotlib,我正在使用熊猫的scatter\u矩阵,我想知道如何在每个散射矩阵上绘制2D阵列?另外,我如何识别输出的哪个AxesSubplot是输出图上的哪个矩阵?scatter\u matrix是pandas子模块中的pandas的一个方便功能。虽然(而且这个示例只提供了一点帮助),但是这个示例使理解它是如何工作的变得非常简单。考虑文档中的例子: import numpy as np # only needed for the example input import pandas as pd from

我正在使用熊猫的
scatter\u矩阵
,我想知道如何在每个散射矩阵上绘制2D阵列?另外,我如何识别输出的哪个
AxesSubplot
是输出图上的哪个矩阵?

scatter\u matrix
pandas
子模块中的
pandas
的一个方便功能。虽然(而且这个示例只提供了一点帮助),但是这个示例使理解它是如何工作的变得非常简单。考虑文档中的例子:

import numpy as np # only needed for the example input
import pandas as pd
from pandas.plotting import scatter_matrix

df = pd.DataFrame(np.random.randn(1000, 4), columns=['a', 'b', 'c', 'd'])
axs = scatter_matrix(df, alpha=0.2, figsize=(6,6), diagonal='kde')
axs[0,0].get_figure().show() # or import and call matplotlib.pyplot.show

请注意左下轴上的标签:这些标签指示输入数据框的哪些列在给定行/列中相对打印。在绘图的第一列中,x轴对应于
df.a
,在绘图的第二行中,y轴对应于
df.b
等(在对角线中,绘制了各列的密度或直方图)。因此,绘图矩阵中的转置元素对应于x和y数据的交换,即绘图相对于x=y线的反射。如果你仔细看看上面的数字,你会发现事实确实如此

换句话说,您不需要计算各个轴的数据,因为您可以直接控制输入数据。在非对角轴
axs[i,j]
中,x数据由
df[df.columns[j]]
给出,y数据由
df[df.columns[i]
给出。下面是一个帮助可视化订单的快速拼图:

axs = scatter_matrix(df, alpha=0.2, figsize=(6,6), diagonal='kde')
for i in range(axs.shape[0]):
    for j in range(axs.shape[1]):
        if i == j:
            continue
        axs[i,j].set_title('x: {}, y: {}'.format(df.columns[j],df.columns[i]),
                           position=(0.5,0.5))

因此,虽然可以挖掘每个
AxesSubplot
对象的内部并从中提取数据,但直接使用
df
的各个列要简单得多。对角线是一个例外:在内核密度图的情况下(假设
diagonal='kde'
关键字被传递到
scatter_matrix
),您无法直接访问底层数据。在这种情况下,您可以从对角线
axessubplot
中提取线:

import matplotlib.pyplot as plt
index = 0
xdat,ydat = axs[index,index].get_lines()[0].get_data() # example for diagonal [0,0]
plt.figure()
plt.plot(xdat,ydat,'-')
plt.xlabel(df.columns[index])
plt.ylabel('density')

谢谢,但它仍然没有回答我的问题(或者我没有理解答案)-如何在每个子地块中绘制二维阵列?我是这个图书馆的新手,所以虽然你的答案可能很简单,但我不明白。我想使用相关图,而不是输入的数据框。我的观点就是要使用数据框:)正如我所说,你可以直接做你想做的事情,但你的问题听起来像一个典型的问题。如果你编辑你的问题并解释为什么你真的需要这样做,我可以告诉你怎么做。我想使用XY图作为热图-在你发布的图纸中,越暗,温度越高hotter@shakedzy这并不能回答为什么不能直接使用底层数据帧。或者,如果你的意思是,你想以某种方式使用重叠半透明圆的黑暗,那是不可能的,但肯定有更好的方法。真的,你到底想解决什么问题?(XY问题中的X;)我使用散射矩阵来查找用户不同特征的相关性。我在这些图上标出了我拥有的所有已知欺诈设备,我希望创建一个用于未知设备的热图,看看它们与欺诈行为有多接近