Can I plot a linear regression with datetimes on the x-axis with seaborn?

前端 未结 2 1047
旧巷少年郎
旧巷少年郎 2020-12-29 14:26

My DataFrame object looks like

            amount
date    
2014-01-06  1
2014-01-07  1
2014-01-08  4
2014-01-09  1
2014-01-14  1

I would li

2条回答
  •  灰色年华
    2020-12-29 14:33

    note: this has a lot in common with Ian Thompson's answer but the approach is different enough to have it be a separate answer. I use the DataFrame format provided in the question and avoid changing the index.

    Seaborn and other libraries don't deal as well with datetime axes as you might like them to. Here's how I'd work around it:

    Start by adding a column of date ordinals

    Seaborn will deal better with these than with dates. This is a handy trick for doing all kind of mathy things with dates and libraries that don't love dates.

    df['date_ordinal'] = pd.to_datetime(df['date']).apply(lambda date: date.toordinal())
    

    Make a plot with the ordinals on the date axis

    ax = seaborn.regplot(
        data=df,
        x='date_ordinal',
        y='amount',
    )
    # Tighten up the axes for prettiness
    ax.set_xlim(df['date_ordinal'].min() - 1, df['date_ordinal'].max() + 1)
    ax.set_ylim(0, df['amount'].max() + 1)
    

    Replace the ordinal X-axis labels with nice, readable dates

    ax.set_xlabel('date')
    new_labels = [date.fromordinal(int(item)) for item in ax.get_xticks()]
    ax.set_xticklabels(new_labels)
    

    ta-daa!

提交回复
热议问题