гистограмма Seaborn для категориальных данных, сгруппированных - PullRequest
0 голосов
/ 29 августа 2018

Я хотел бы построить гистограмму категориальных данных, сгруппированных по сериям.

например. у меня есть данные, скажем, 6 столбцов, здесь ниже заполнены произвольными значениями:

df = pd.DataFrame (np.arange (12) .reshape (2,6), столбцы = ['A', 'B', 'C', 'D', 'E', 'F'] )

   A  B  C  D   E   F
0  0  1  2  3   4   5
1  6  7  8  9  10  11

и я хотел бы просто отобразить эту простую информацию в виде гистограммы, где для каждого из имен столбцов AF будет показан один столбец (с именем на оси или в строке) для строки 0 и один столбец для строка 1, высота каждого столбца - это число в теле матрицы для этой строки и столбца.

Как и обычные сгруппированные гистограммы, все столбцы для строки 0 должны быть другого цвета, чем для строки 1. Проще говоря, просто гистограмма для категорий A-F, сгруппированных по двум строкам.

На самом деле в моих реальных данных каждая строка имеет реальное имя, а не просто порядковый номер, который здесь 0 и 1 для двух строк.

Пока что я не нашел способа сделать это с морским рожком, и видел только несколько ужасных хаков с самим matplotlib. Какой самый простой способ сделать это?

Есть ли способ?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вы можете использовать plotly для рисования сгруппированных гистограмм. сюжетно рисовать графики и диаграммы очень интерактивно и привлекательно. Вот пример.

Импорт библиотек:

import pandas as pd
import numpy as np

import plotly.offline as py
py.init_notebook_mode(connected=True)
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)

import plotly.graph_objs as go
import plotly.offline as offline
offline.init_notebook_mode()
import plotly.tools as tls

Создать DataFrame:

df = pd.DataFrame(np.arange(12).reshape(2,6),columns=['A','B','C','D','E','F'])

Гистограмма графиков:

trace1 = go.Bar(x=df.columns.tolist(),y=df.loc[0].values,
                name='first_row')

trace2 = go.Bar(x= df.columns.tolist(),y=df.loc[1].values,
                name='second-row')

data = [trace1, trace2]
layout = go.Layout(barmode='group')

fig = go.Figure(data=data, layout=layout)
py.iplot(fig, filename='grouped-bar')

enter image description here

0 голосов
/ 29 августа 2018

Вы можете построить транспонированный кадр данных как df.T.plot.bar().

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

df = pd.DataFrame(np.arange(12).reshape(2,6),columns=list("ABCDEF"))

df.T.plot.bar()

plt.show()

enter image description here

При использовании seaborn требуется изменить («расплавить») фрейм данных:

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

df = pd.DataFrame(np.arange(12).reshape(2,6),columns=list("ABCDEF"))

df2 = pd.melt(df.reset_index(), id_vars=["index"], value_vars=df.columns)

sns.barplot(data=df2, x="variable", y="value", hue="index")

plt.show()

enter image description here

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