如何使用分配不同颜色的散点图绘制多个类别数据?

时间:2019-05-24 16:18:34

标签: python pandas matplotlib

我有两列类别变量,并且我想在同一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 个答案:

答案 0 :(得分:1)

假设要在x=start_timey='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

答案 1 :(得分:0)

我认为您可以通过创建较小的数据框来执行所需的操作,该数据框包含要隔离的每个类别(a&是,a&否,b&yes和b&no):

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

然后,您可以选择此数据框中您感兴趣的其他值,并使用所需的样式分散每个值

答案 2 :(得分:0)

我要做的是将您的数据从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