繁体   English   中英

使用 boolean 分类时间序列数据绘制 pandas dataframe

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM