Несколько дистоплотов из колонн панд - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь использовать Seaborn для построения графика содержимого для Pandas DataFrame, но я не могу понять, как складывать дистоплоты.DataFrame у меня выглядит примерно так (упрощенно).

Image    | Obj1 | Obj2 | ... | ObjN
-----------------------------------
img1.jpg |   2  |   1  | ... | 0
-----------------------------------
img2.jpg |   5  |   5  | ... |  5
-----------------------------------
img3.jpg |   9  |   0  | ... |  1

Теперь я хочу построить распределение N-объектов по всему набору изображений.После этого я хочу увидеть, сколько изображений содержит Obj1, сколько в них Obj2 и т. Д. Это чисто визуальная вещь, поэтому не думайте о том, что это не лучший способ показать указанные данные.

По сути, я хочу сделать что-то вроде:

for column in df.column:
   sns.distplot(column) # Stack these distributions together with different colors 

plt.show() # Display one plot with N-distribution plots inside

Желая получить вывод, похожий на этот (ish): Пример графика


РЕДАКТИРОВАТЬ

Опираясь на ответ @ con_u, я сгенерировал следующие графики:

Без увеличения Увеличенное изображение начала координат

Они довольно бесполезны, хотя с вертикальными полосами, которые можно увидеть на рисунке 1. Я знаю, что распределение сильно искажено в сторону меньших чисел (отсчетов), так что, возможно, мне не повезло, и мне нужно пересмотреть свои варианты построения.

1 Ответ

0 голосов
/ 25 октября 2018

Это работает для меня.

# ----------------------------------------------------------------------
# Import library
# ----------------------------------------------------------------------
import numpy as np
import pandas as pd
import seaborn as sns
import random

# ----------------------------------------------------------------------
# Create an artificial dataframe
# ----------------------------------------------------------------------
df = pd.DataFrame({'image':np.arange(100) + 1,
                  'obj1':np.random.randint(low=1, high=100, size=100),
                  'obj2':np.random.randint(low=1, high=100, size=100),
                  'obj3':np.random.randint(low=1, high=100, size=100),
                  'obj4':np.random.randint(low=1, high=100, size=100)})

df = df.set_index('image')
df.head(10)

# ----------------------------------------------------------------------
# Plot the distributions (column-wise) (if you just want some columns)
# ----------------------------------------------------------------------
sns.distplot(df[['obj1']], hist=False, rug=True)
sns.distplot(df[['obj2']], hist=False, rug=True)
sns.distplot(df[['obj3']], hist=False, rug=True)
sns.distplot(df[['obj4']], hist=False, rug=True)
sns.plt.show()

# ----------------------------------------------------------------------
# Plot the distributions (column-wise) (looping method)
# ----------------------------------------------------------------------
for col in df.columns:
  sns.distplot(df[[col]], hist=False, rug=True)

Вы также можете проверить соответствующие здесь:

enter image description here

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