Построение графиков на одной панели для различных функций с Seaborn - PullRequest
0 голосов
/ 04 января 2019

У меня есть датафрейм с 12 различными функциями. И я хотел бы построить гистограммы для каждого за один проход на панели 4х3.

test = pd.DataFrame({
    'a': [10, 5, -2],
    'b': [2, 3, 1],
    'c': [10, 5, -2],
    'd': [-10, -5, 2],
    'aa': [10, 5, -2],
    'bb': [2, 3, 1],
    'cc': [10, 5, -2],
    'dd': [-10, -5, 2],
    'aaa': [10, 5, -2],
    'bbb': [2, 3, 1],
    'ccc': [10, 5, -2],
    'ddd': [-10, -5, 2]
})

Я могу сделать это, написав что-то вроде кода ниже:

# plot
f, axes = plt.subplots(3, 4, figsize=(20, 10), sharex=True)
sns.distplot( test["a"] , color="skyblue", ax=axes[0, 0])
sns.distplot( test["b"] , color="olive", ax=axes[0, 1])
sns.distplot( test["c"] , color="teal", ax=axes[0, 2])
sns.distplot( test["d"] , color="grey", ax=axes[0, 3])
...

enter image description here

Как я могу вместо этого изящно выполнять циклы и повторять функции? Я хотел бы назначить те же четыре цвета для каждой строки.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Seaborn предоставляет FacetGrid для таких целей.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

test = pd.DataFrame({
    'a': [10, 5, -2],
    'b': [2, 3, 1],
    'c': [10, 5, -2],
    'd': [-10, -5, 2],
    'aa': [10, 5, -2],
    'bb': [2, 3, 1],
    'cc': [10, 5, -2],
    'dd': [-10, -5, 2],
    'aaa': [10, 5, -2],
    'bbb': [2, 3, 1],
    'ccc': [10, 5, -2],
    'ddd': [-10, -5, 2]
})
data = pd.melt(test)
data["hue"] = data["variable"].apply(lambda x: x[:1])

g = sns.FacetGrid(data, col="variable", col_wrap=4, hue="hue")
g.map(sns.distplot, "value")

plt.show()

enter image description here

0 голосов
/ 04 января 2019

Вы можете включить все в цикл for:

colors =["skyblue", "olive", "teal", "grey"]
f, axes = plt.subplots(3, 4, figsize=(20, 10), sharex=True)
for i, ax in enumerate(axes.flatten()):
    sns.distplot( test.iloc[:, i] , color=colors[i%4], ax=ax)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...