- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用pandas
的scatter_matrix
,我想知道如何在每个散点矩阵上绘制二维数组?另外,如何识别输出的哪个 AxesSubplot
是输出图上的哪个矩阵?
最佳答案
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 线的反射(reflect)。如果您仔细观察上图,您会发现确实如此。
换句话说,您不需要计算各个轴的数据,因为您可以直接控制输入数据。在非对角轴 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
的相应列要简单得多> 直接。一个异常(exception)是对角线:在核密度图的情况下(假设 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')
关于python - 如何从 scatter_matrix 获取数据数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47967734/
我是一名优秀的程序员,十分优秀!