2016-09-21 2 views
1

У меня есть pandas dataframe pandas_df с 6 входными столбцами: column_1, column_2, ... , column_6 и один столбец результатов result. Теперь я использовал следующий код для построения графика рассеяния для каждых двух пар входных столбцов (так что у меня есть 6 * 5/2 = 15 цифр). Я сделал следующий код 15 раз, и каждый из них создал большую фигуру.matplotlib: Участок нескольких мелких фигур в одном большом участке

Мне интересно, есть ли способ перебрать все возможные пары столбцов и нарисовать все 15 фигур в виде небольших фигур в одном большом сюжете? Благодаря!

%matplotlib notebook 
import matplotlib.pyplot as plt 
import matplotlib 
matplotlib.style.use('ggplot') 

pandas_df.plot(x='column_1', y='column_2', kind = 'scatter', c = 'result') 
+0

Вы смотрели через 'seaborn' [API] (https://stanford.edu/~mwaskom/software/seaborn/api.html)/[галерея] (https://stanford.edu/~mwaskom/software/seaborn/examples/index.html)? [PairGrid] (https://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.PairGrid.html#seaborn.PairGrid), в частности, выглядит так, как вы описываете. – lanery

ответ

4

рассмотреть dataframe df

df = pd.DataFrame(np.random.rand(10, 6), columns=pd.Series(list('123456')).radd('C')) 
df 

enter image description here


Решение
Использование itertools и matplotlib.pyplot.subplots

from itertools import combinations 
import matplotlib.pyplot as plt 

pairs = list(combinations(df.columns, 2)) 

fig, axes = plt.subplots(len(pairs) // 3, 3, figsize=(15, 12)) 
for i, pair in enumerate(pairs): 
    d = df[list(pair)] 
    ax = axes[i // 3, i % 3] 
    d.plot.scatter(*pair, ax=ax) 

fig.tight_layout() 

enter image description here

+0

@piRSuared: В fig, axes = plt.subplots (len (pairs) // 3, 3, figsize = (15, 12)), где определено «парное»? Благодарю. – Edamame

+0

@ Извиняюсь, я обновил сообщение – piRSquared

Смежные вопросы