[英]Plotting pandas dataframe with boolean categorical time-series data
我要 plot 一个 pandas dataframe 的表格
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame()
df['date'] = pd.date_range(start='2021-02-01', end='2021-03-14', freq='D')
df['specimen1'] = 0
df['specimen2'] = 0
df['specimen3'] = 0
df['specimen1'].loc[(df.date >= '2021-02-01') & (df.date <= '2021-02-03')] = 1
df['specimen3'].loc[(df.date >= '2021-02-02') & (df.date <= '2021-02-05')] = 1
df['specimen2'].loc[(df.date >= '2021-02-10') & (df.date <= '2021-02-20')] = 1
df = df.set_index('date')
df.head()
其中df
包含时间序列数据。 这些列包含不同样本(分类数据)的布尔值(真/假)。 我如何使用 seaborn 或 matplotlib plot? 我想要 x 轴上的类别和 y 轴上的日期——每个specimen
应该有一条垂直线来表示满足True
条件的日期范围。 在 seaborn 我试过了
sns.catplot(data=df)
但这给了我:
因为它不想 plot y 轴上的日期。
您可能希望将数据可视化为热图。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame()
df['date'] = pd.date_range(start='2021-02-01', end='2021-03-14', freq='D')
df['specimen1'] = 0
df['specimen2'] = 0
df['specimen3'] = 0
df['specimen1'].loc[(df.date >= '2021-02-01') & (df.date <= '2021-02-03')] = 1
df['specimen3'].loc[(df.date >= '2021-02-02') & (df.date <= '2021-02-05')] = 1
df['specimen2'].loc[(df.date >= '2021-02-10') & (df.date <= '2021-02-20')] = 1
df['date'] = df['date'].dt.date
df = df.set_index('date')
# Visualize the data as heatmap
plt.rcParams['font.size'] = 14
fig, ax = plt.subplots(1, 1, figsize=(9, 16))
sns.heatmap(df, cmap=sns.light_palette('lightblue'), cbar=False, ax=ax)
ax.set_xlabel('Specimen')
ax.set_ylabel('Date')
ax.set_yticks([i for i in range(len(df))], [i for i in df.index.values])
plt.show()
# Save the figure
# fig.savefig('out.png', bbox_inches='tight', facecolor='white')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.