Как построить несколько категориальных данных, используя точечный график, назначая другой цвет? - PullRequest
1 голос
/ 24 мая 2019

У меня есть два столбца категориальных переменных, и я хочу построить каждый из столбцов относительно одной оси X.

например, для следующего CSV-файла, я хочу построить тип и назначить цвет в соответствии со статусом. Например, тип a представлен как 'x', а тип 'b' представлен как 'o'. Если тип «a» имеет статус «да», то его зеленый цвет остаётся красным и такой же для типа «b».

start_time,type,status
2017-08-21 13:41:39.899,a,yes
2017-08-21 14:11:21.283,b,yes
2017-08-21 14:22:09.590,b,no
2017-08-21 14:27:56.175,b,yes
2017-08-21 15:51:07.950,a,yes
2017-08-21 17:37:37.959,a,no
2017-08-21 18:53:37.040,b,yes
2017-08-21 18:54:34.282,a,no
2017-08-21 20:36:36.180,b,yes
2017-08-21 20:42:23.579,a,no

Я пытался использовать matplotlib, plt.scatter(), но не смог получить то, что хотел. Пожалуйста, помогите. Кроме того, я использовал время начала в качестве индекса в панде. Редактировать : Ось X - время начала

Ответы [ 3 ]

1 голос
/ 24 мая 2019

Предполагая, что вы хотите построить разброс на x=start_time и y='y', вы можете использовать sns.scatterplot:

fig, ax = plt.subplots(figsize=(10,6))
sns.scatterplot(x='start_time', y='y',
                style='type',
                hue='status',
                data=df,
                ax=ax)
ax.set_xlim(df.start_time.min(), df.start_time.max())
plt.show()

, что дает

enter image description here

0 голосов
/ 24 мая 2019

Что я хотел бы сделать, это разделить ваши данные из CSV на кадры данных «да» и «нет» и отобразить их отдельно разными цветами:

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

csv_data = pd.read_csv("data.csv") # csv file containing data provided in question description
df = pd.DataFrame(csv_data)

yes = df[df.status == 'yes']
no = df[df.status == 'no']

plt.scatter(yes.start_time, yes.type, marker='o', c='green')
plt.scatter(no.start_time, no.type, marker='o', c='red')
plt.xticks(rotation=90)
plt.show()

Приведенный выше код приведет к следующему графику (извините за метки осей, которые были обрезаны на моем скриншоте):

enter image description here

0 голосов
/ 24 мая 2019

Я думаю, что вы можете выполнить то, что вы хотите, создав меньший информационный фрейм, который содержит все категории, которые вы хотите изолировать (a & yes, a & no, b & yes и b & no), выполнив следующее:

a_and_yes= df.loc[(df['type']=='a') & (df['status'])=="yes"] # for each categories

Затем вы можете выбрать другое значение, которое вас интересует в этом фрейме данных, и распределить каждое из них в желаемом стиле

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