【问题标题】:How to create "Weekly Boxplots"?如何创建“每周箱线图”?
【发布时间】:2021-09-08 06:32:02
【问题描述】:

我的数据集看起来像 this。我有两个类别的月份数据,62 行,每个类别 31 行。我想在 y 轴上创建一个带有周数和月份的每周箱线图 [如 01-12、02-12、03-12 等]。

到目前为止,我已经想出了以下代码。

import seaborn as sns
import matplotlib.pyplot as plt

sns.set()
fig, ax = plt.subplots(figsize=(18,6))
df.index = pd.to_datetime(df.Timestamp)

sns.boxplot(x=df.index.week, y='Values', data=df, hue='Category', ax=ax)

通过使用df.index.week,我没有得到预期的周值,而是给了我一年中的周数,例如this

请指导?

【问题讨论】:

    标签: python pandas seaborn boxplot


    【解决方案1】:

    您可以通过格式化Date 列中的值来在df 中创建一个分组列:

    date_range = pd.date_range(start='2013-12-01', end='2013-12-31').to_list()
    df = pd.DataFrame(
        {
            "Date": date_range + date_range,
            "Values": np.random.randint(1000, 20000, 62),
            "Category": ["anti"] * 31 + ["pro"] * 31,
        }
    )
    

    使用pandas.Series.dt.strftime 获取由- 连接的年份(%U)和月份(%m):

    df["week_month"] = df["Date"].dt.strftime("%U-%m")
    

    (感谢更好的方法@Cameron Riddell

    然后绘制:

    sns.boxplot(x="week_month", y="Values", data=df, hue="Category")
    

    【讨论】:

    • 您可以使用 df["Date"].dt.strftime("%U-%m") 而不是对 .dt.strftime 执行 2 次单独调用
    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多