web-dev-qa-db-ja.com

Rの `ペア`のmatplotlibアナログ

Rには、データセット内の変数間のペアワイズ接続のプロットのニース行列を提供する便利な関数pairsがあります。結果のプロットは、 このブログ投稿 からコピーした次の図のようになります。

pairs

Pythonのmatplolibに基づいたすぐに使用できる関数はありますか? gallery を検索しましたが、必要なものに似たものが見つかりませんでした。技術的には、これは簡単な作業ですが、考えられるすべてのケース、ラベル、タイトルなどを適切に処理するのは非常に面倒です。

[〜#〜] update [〜#〜]以下の私の答えをすばやく汚い概算で見てください。

36
Boris Gorelik

Pandas 組み込み関数scatter_matrixソースコード )これはこんな感じです。

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 をご覧ください。

48
bmu

私のニーズへの迅速で汚い近似:

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

上記のコードはここにパブリックドメインにリリースされます

3
Boris Gorelik

Matplotlibの最近のバージョン(少なくとも1.4)のsubplots関数は、これを少し簡単にします。

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)
2

最近のバージョン(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

seaborn pairplot(...)関数 を使用できます。これは、Rのpairs(...)関数とまったく同じです。

1
Andrei Keino

私の知る限り、そのようなすぐに使える関数はありません。

1
ptomato