matplotlib аналог R's `пар` - PullRequest
       42

matplotlib аналог R's `пар`

34 голосов
/ 21 апреля 2010

R имеет полезную функцию pairs, которая обеспечивает красивую матрицу графиков попарных связей между переменными в наборе данных. Полученный график выглядит аналогично следующему рисунку, скопированному из этого сообщения в блоге :

pairs

Есть ли готовая к использованию функция, основанная на matplolib в python? Я искал в галерее , но не смог найти ничего похожего на то, что мне нужно. Технически это должно быть простой задачей, но правильная обработка всех возможных случаев, ярлыков, заголовков и т. Д. Очень утомительна.

ОБНОВЛЕНИЕ см. Ниже мой ответ с быстрым и грязным приближением.

Ответы [ 6 ]

44 голосов
/ 18 октября 2012

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 подобных заговоров. Взгляните на документы .

3 голосов
/ 22 апреля 2010

Быстрое и грязное приближение к моим потребностям:

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 голосов
/ 10 ноября 2014

Функция subplots в последних версиях matplotlib (как минимум 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)
1 голос
/ 17 июля 2018

Вы можете использовать функцию seaborn pairplot (...) . Это похоже на функцию пар (...) в R.

1 голос
/ 10 июля 2018

В последних версиях (после 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 может принимать значения типа kde, hist. scatter_matrix

0 голосов
/ 22 апреля 2010

Насколько я знаю, такой готовой функции не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...