我有两列类别变量,并且我想在同一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轴是开始时间
答案 0 :(得分:1)
假设要在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()
给出
答案 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()
上面的代码将导致以下绘图(对我的屏幕截图中的轴标签表示抱歉):