我正在使用scatter_matrix
的{{1}},我想知道如何在每个散射矩阵上绘制2D数组?另外,如何识别输出图中哪个pandas
输出是哪个矩阵?
答案 0 :(得分:1)
scatter_matrix
是来自pandas
子模块的pandas.plotting
的便利函数。虽然the documentation is scarce(以及docstring只是更有帮助),但该示例使得理解其工作方式非常简单。请考虑文档中的示例:
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
),您无法直接访问基础数据。在这种情况下,您可以从对角线AxesSubplots
:
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')