随时间可视化多个虚拟变量

时间:2017-06-29 21:09:11

标签: python pandas matplotlib

我有一个带有虚拟变量的数据框,用于日常天气类型观测。

         date  high_wind  thunder  snow  smoke
0  2050-10-23        1.0      NaN   NaN    NaN
1  2050-10-24        1.0      1.0   NaN    NaN
2  2050-10-25        NaN      NaN   NaN    NaN
3  2050-10-26        NaN      NaN   NaN    1.0
4  2050-10-27        NaN      NaN   NaN    1.0
5  2050-10-28        NaN      NaN   NaN    1.0
6  2050-10-29        1.0      NaN   NaN    NaN
7  2050-10-30        NaN      1.0   NaN    NaN
8  2050-10-31        NaN      1.0   NaN    NaN
9  2050-11-01        1.0      1.0   NaN    NaN
10 2050-11-02        1.0      1.0   NaN    NaN
11 2050-11-03        1.0      1.0   NaN    NaN
12 2050-11-04        1.0      NaN   NaN    NaN
13 2050-11-05        1.0      NaN   NaN    NaN
14 2050-11-06        NaN      NaN   NaN    NaN
15 2050-11-07        NaN      1.0   NaN    NaN
16 2050-11-08        NaN      NaN   NaN    NaN
17 2050-11-09        NaN      NaN   1.0    NaN
18 2050-11-10        NaN      NaN   NaN    NaN
19 2050-11-11        NaN      NaN   1.0    NaN
20 2050-11-12        NaN      NaN   1.0    NaN
21 2050-11-13        NaN      NaN   NaN    NaN

对于那些在家里玩的人,请复制以上内容然后:

import pandas as pd
df = pd.read_clipboard()    
df.date = df.date.apply(pd.to_datetime)
df.set_index('date', inplace=True)

我希望使用x轴上的日期和y轴上的每个天气类型类别可视化此数据框。这是我到目前为止所尝试的内容:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
labels = df.columns.tolist()

#unsatisfying loop to give categories some y separation
for i,col in enumerate(df.columns):
    ax.scatter(x=df[col].index, y=(df[col]+i)) #add a little to each
ax.set_yticklabels(labels)
ax.set_xlim(df.index.min(), df.index.max())
fig.autofmt_xdate()

这给了我这个:

lousy category plot

的问题:

  1. 如何正确对齐y标签?

  2. 是否有更好的方法来构建数据以使绘图更容易?

1 个答案:

答案 0 :(得分:2)

这标志着你的标签:

ax.set_yticks(range(1, len(df.columns) + 1))

enter image description here