matplotlib模拟R的`对`

时间:2010-04-21 10:40:19

标签: python r matplotlib

R有一个有用的函数pairs,它为数据集中变量之间的成对连接提供了很好的矩阵。结果图看起来类似于下图,从this blog post复制:

pairs

是否有基于python的matplolib的现成功能?我搜索了它gallery,但找不到任何类似我需要的东西。从技术上讲,这应该是一项简单的任务,但正确处理所有可能的案例,标签,标题等是非常繁琐的。

更新以快速而肮脏的近似值查看我的回答。

6 个答案:

答案 0 :(得分:44)

Pandas有内置函数scatter_matrixsource code),就像这样。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 

df = pd.DataFrame(np.random.randn(1000, 4), columns=['A','B','C','D'])
axes = pd.tools.plotting.scatter_matrix(df, alpha=0.2)
plt.tight_layout()
plt.savefig('scatter_matrix.png')

scatter_matrix.png

但是pandas具体(但可以作为起点)。

熊猫中有更多R个相似的地块。看看docs

答案 1 :(得分:3)

快速而肮脏的近似我的需求:

def pair(data, labels=None):
    """ Generate something similar to R `pair` """

    nVariables = data.shape[1]
    if labels is None:
        labels = ['var%d'%i for i in range(nVariables)]
    fig = pl.figure()
    for i in range(nVariables):
        for j in range(nVariables):
            nSub = i * nVariables + j + 1
            ax = fig.add_subplot(nVariables, nVariables, nSub)
            if i == j:
                ax.hist(data[:,i])
                ax.set_title(labels[i])
            else:
                ax.plot(data[:,i], data[:,j], '.k')

    return fig

以上代码特此发布到公共领域

答案 2 :(得分:2)

最近版本的matplotlib中的subplots函数(至少1.4)使这更容易:

def pairs(data, names):
    "Quick&dirty scatterplot matrix"
    d = len(data)
    fig, axes = plt.subplots(nrows=d, ncols=d, sharex='col', sharey='row')
    for i in range(d):
        for j in range(d):
            ax = axes[i,j]
            if i == j:
                ax.text(0.5, 0.5, names[i], transform=ax.transAxes,
                        horizontalalignment='center', verticalalignment='center',
                        fontsize=16)
            else:
                ax.scatter(data[j], data[i], s=10)

答案 3 :(得分:1)

在最新版本中(0.23.3之后,或者也许在更早版本中也可以),您可以使用:

In [80]: from pandas.plotting import scatter_matrix

In [81]: df = pd.DataFrame(np.random.randn(1000, 4), columns=['a', 'b', 'c', 'd'])

In [82]: scatter_matrix(df, alpha=0.2, figsize=(6, 6), diagonal='kde')

diagonal可以采用kdehist之类的值。 scatter_matrix

答案 4 :(得分:1)

您可以使用seaborn pairplot(...) function 。就像R中的pair(...)函数一样。

答案 5 :(得分:0)

据我所知,没有像这样的现成功能。