Как отобразить названия ярлыков на графике гистограммы панд - PullRequest
2 голосов
/ 08 октября 2019

Я могу построить несколько гистограмм на одном графике, используя панд, но мало чего не хватает:

  1. Как присвоить метку.
  2. Я могу построить только одну фигуру, какизменить его на макет = (3,1) или что-то еще.
  3. Кроме того, на рисунке 1 все ячейки заполнены сплошными цветами, и их вид трудно понять, какой, какой, как заполнитьзатем с разными маркерами (например, крестики, косые черты и т. д.)?

Вот MWE:

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

df = sns.load_dataset('iris')

df.groupby('species')['sepal_length'].hist(alpha=0.7,label='species')
plt.legend()

Вывод: enter image description here

Чтобы изменить макет, я могу использовать ключевое слово, но не могу дать им цвета

КАК ДАТЬ РАЗНЫЕ ЦВЕТА?

df.hist('sepal_length',by='species',layout=(3,1))
plt.tight_layout()

Дает: enter image description here

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Вы можете разрешить до groupby:

fig,ax = plt.subplots()

hatches = ('\\', '//', '..')         # fill pattern
for (i, d),hatch in zip(df.groupby('species'), hatches):
    d['sepal_length'].hist(alpha=0.7, ax=ax, label=i, hatch=hatch)

ax.legend()

Вывод:

enter image description here

1 голос
/ 08 октября 2019

Это больше кода, но использование чистого matplotlib всегда даст вам больше контроля над графиками. Для вашего второго случая:

import matplotlib.pyplot as plt
import numpy as np
from itertools import zip_longest

# Dictionary of color for each species
color_d = dict(zip_longest(df.species.unique(), 
                           plt.rcParams['axes.prop_cycle'].by_key()['color']))

# Use the same bins for each
xmin = df.sepal_length.min()
xmax = df.sepal_length.max()
bins = np.linspace(xmin, xmax, 20)

# Set up correct number of subplots, space them out. 
fig, ax = plt.subplots(nrows=df.species.nunique(), figsize=(4,8))
plt.subplots_adjust(hspace=0.4)

for i, (lab, gp) in enumerate(df.groupby('species')):
    ax[i].hist(gp.sepal_length, ec='k', bins=bins, color=color_d[lab])
    ax[i].set_title(lab)

    # same xlim for each so we can see differences
    ax[i].set_xlim(xmin, xmax)

enter image description here

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