R有一個有用的函數pairs
,它提供了數據集中變量之間成對連接圖的很好矩陣。所得的情節看起來類似於下圖,從this blog post複製:matplotlib類似的R````
有沒有準備基於Python的matplolib使用功能?我搜查了它的gallery,但找不到類似我需要的東西。從技術上講,這應該是一項簡單的任務,但對所有可能的案例,標籤,標題等的適當處理是非常乏味的。
UPDATE請參閱下面我的答案,以快速和骯髒的近似值。
R有一個有用的函數pairs
,它提供了數據集中變量之間成對連接圖的很好矩陣。所得的情節看起來類似於下圖,從this blog post複製:matplotlib類似的R````
有沒有準備基於Python的matplolib使用功能?我搜查了它的gallery,但找不到類似我需要的東西。從技術上講,這應該是一項簡單的任務,但對所有可能的案例,標籤,標題等的適當處理是非常乏味的。
UPDATE請參閱下面我的答案,以快速和骯髒的近似值。
Pandas
有一個內置的功能scatter_matrix
(source 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')
然而,它是特定pandas
(但也可使用作爲起點)。
還有一些R
像大熊貓的情節。看看docs。
據我所知,沒有這樣的隨時可用的功能。
快速和骯髒的接近我的需求:
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
上面的代碼特此發佈到公共領域
對我來說,在基本模塊代碼中有額外的價值。這非常明確,我將把它作爲數據處理任務的指導。一個問題:「數據」可能是什麼對象類型? – Merlin 2017-11-22 05:00:55
在最新版本的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)
如果應用於scikit-learn的數據集標準,則「len(data)」將返回觀察值的數量,而不是變量的數量。 'd = data.shape [1]'是這種情況下的解決方案。 – 2016-09-18 12:14:34
Seaborn有這個,請參閱:http://seaborn.pydata.org/generated/seaborn。 pairplot.html – 2017-09-14 19:04:37