Как составить график для каждого дня недели для каждой отдельной категории в датафрейме - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть примерный фрейм данных, подобный показанному ниже:

Cat      Mon  Tues  Weds  Thurs  Fri  Sat  Sun
red      23    34    1     10    30   500   9 
yellow   23    34    11    31    22   20    9 
blue     23    34    123   10    412  4     9 
black    23    34    11    321   53   7     9 

etc......

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

Так, например, в приведенном выше кадре данных будет 4 субплота.Для каждого суппота было бы 7 баров, представляющих счет за соответствующий день.

Если у кого-то есть какие-либо предложения, это было бы здорово, спасибо.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Ну, ответ уже принят, но я думал, что все равно внесу это решение.Всегда приятно видеть несколько решений одной и той же проблемы.

Мне нравится использовать matplotlib для непосредственного построения графиков, так как легче настроить фигуру, чтобы она была точно такой, как мы хотим.Мне также нравится это решение, так как легко разумно раскрасить кошек (то есть, используя красные полосы для построения красных кошек)

Давайте начнем с импорта ваших данных:

import pandas as pd
from io import StringIO
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_fwf(StringIO("""
Cat      Mon  Tues  Weds  Thurs  Fri  Sat  Sun
red      23    34    1     10    30   500   9 
yellow   23    34    11    31    22   20    9 
blue     23    34    123   10    412  4     9 
black    23    34    11    321   53   7     9
"""), header=1)

Далее мы сделаемсюжет, убедившись, что графики окрашены разумно (то есть, количество красных кошек не представлено синими полосами):

fig, ax = plt.subplots(2, 2)

color = ['C3', 'C8', 'C0', 'k']
ax = ax.reshape(4)
for i in range(4):
    ax[i].bar(np.r_[:7], df.T[i][1:], color=color[i])
    ax[i].set_xticks(np.r_[:7])
    ax[i].set_xticklabels(['Mon', 'Tue', 'Wed', 'Thurs', 'Fri', 'Sat', 'Sun'], rotation=90)

fig.tight_layout()

Все это дало мне следующее:

enter image description here

0 голосов
/ 25 февраля 2019

Вы можете использовать T, а затем plot.bar():

df.T.plot.bar(subplots=True, layout=(2,2), figsize=(15,10));

Выход:

enter image description here

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