繁体   English   中英

如何正确地将Seaborn / matplotlib中的x轴与时间轴隔开?

[英]How to properly space the x-axis in seaborn/matplotlib with a time axis?

我有一个以时间轴为索引的熊猫数据框。 绘制以下代码时

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns; sns.set();
ids = [1,2,3,4]
dates = pd.date_range('20150704', '20160331')
vals = np.random.randn(len(ids)*len(dates))
allids = np.tile(ids, len(dates))
alldates = np.tile(dates, len(ids))
df = (pd.DataFrame(np.vstack((allids, vals)).T, index=alldates)
    .reset_index().rename(columns={'index':'datetime',0:'unique_id',1:'height'}))

time_group = '1w'
threshold = 0.50

fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(12, 16), sharex=True)

for (i, temp), ax in zip(df.groupby('unique_id'), axes.ravel()):
    (temp.set_index('datetime').height
         .groupby(pd.TimeGrouper(time_group))
         .mean()
         .plot(ax=ax))

我得到一个有4个地块的地块。 x轴上垂直线的间距如下所示:

垂直间距错误

请注意,例如11月比12月宽(因此,不仅仅是每个月的天数)。 显然,这是由于每个月的数据点数,而不是每个月的天数。 有什么建议可以使垂直线与月份的开始/结束时间正确地间隔开? 这是错误吗?

1W将根据每月的星期日进行分组,在某些月份中,我们的星期日比其他月份要多。这就是为什么有些月份更宽的原因。 进行以下更改应有帮助...

    %matplotlib inline
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    import matplotlib.dates as mdates
    import seaborn as sns; sns.set();
    ids = [1,2,3,4]
    dates = pd.date_range('20150704', '20160331')
    vals = np.random.randn(len(ids)*len(dates))
    allids = np.tile(ids, len(dates))
    alldates = np.tile(dates, len(ids))
    df = (pd.DataFrame(np.vstack((allids, vals)).T, index=alldates)
        .reset_index().rename(columns={'index':'datetime',0:'unique_id',1:'height'}))
    time_group = '1w'
    threshold = 0.50

    fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(12, 16), sharex=True)


    for (i, temp), ax in zip(df.groupby('unique_id'), axes.ravel()):
        b=(temp.set_index('datetime').height
             .groupby(pd.TimeGrouper(time_group))
             .mean())
        ax.plot(b.index,b)
        ax.xaxis.set_major_formatter(mdates.DateFormatter('%b'))
    plt.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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