gpt4 book ai didi

python - 如何创建按月分组的年度条形图

转载 作者:行者123 更新时间:2023-12-05 01:58:03 24 4
gpt4 key购买 nike

我在尝试使用按年份和月份分组的 DataFrame 创建条形图时遇到了困难。使用以下代码,我试图在创建的图像中绘制数据,而不是返回第二张图像。我还尝试将图例向右移动并将其值更改为相应的月份。

我开始对使用 groupby 命令获得的 DataFrame 有了一些感觉,虽然没有得到我期望的结果,但我还是问了你们。

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

df = pd.read_csv('fcc-forum-pageviews.csv', index_col='date')
line_plot = df.value[(df.value > df.value.quantile(0.025)) & (df.value < df.value.quantile(0.975))]
fig, ax = plt.subplots(figsize=(10,10))
bar_plot = line_plot.groupby([line_plot.index.year, line_plot.index.month]).mean().unstack()
bar_plot.plot(kind='bar')
ax.set_xlabel('Years')
ax.set_ylabel('Average Page Views')
plt.show()

enter image description here enter image description here

这是我正在分析的数据格式。

date,value
2016-05-09,1201
2016-05-10,2329
2016-05-11,1716
2016-05-12,10539
2016-05-13,6933

最佳答案

  1. 添加一个已排序的分类 'month' pd.Categorical
  2. 使用 pd.pivot_table 将数据帧转换为宽格式其中 aggfunc='mean'是默认值。
    • 宽格式通常最适合绘制分组条形图。
  3. pandas.DataFrame.plot 返回 matplotlib.axes.Axes , 所以没有必要使用 fig, ax = plt.subplots(figsize=(10,10)) .
  4. pandas .dt accessor用于提取 'date' 的各种成分, 必须是 datetime dtype
    • 如果'date'不是 datetime dtype , 然后用 df.date = pd.to_datetime(df.date) 转换它.
  5. 测试 python 3.8.11 , pandas 1.3.1 , 和 matplotlib 3.4.2

导入和测试数据

import pandas as pd
from calendar import month_name # conveniently supplies a list of sorted month names or you can type them out manually
import numpy as np # for test data

# test data and dataframe
np.random.seed(365)
rows = 365 * 3
data = {'date': pd.bdate_range('2021-01-01', freq='D', periods=rows), 'value': np.random.randint(100, 1001, size=(rows))}
df = pd.DataFrame(data)

# select data within specified quantiles
df = df[df.value.gt(df.value.quantile(0.025)) & df.value.lt(df.value.quantile(0.975))]

# display(df.head())
date value
0 2021-01-01 694
1 2021-01-02 792
2 2021-01-03 901
3 2021-01-04 959
4 2021-01-05 528

转换和绘图

  • 如果'date'已设置为索引,如评论中所述,使用以下内容:
    • df['months'] = pd.Categorical(df.index.strftime('%B'), categories=months, ordered=True)
# create the month column
months = month_name[1:]
df['months'] = pd.Categorical(df.date.dt.strftime('%B'), categories=months, ordered=True)

# pivot the dataframe into the correct shape
dfp = pd.pivot_table(data=df, index=df.date.dt.year, columns='months', values='value')

# display(dfp.head())
months January February March April May June July August September October November December
date
2021 637.9 595.7 569.8 508.3 589.4 557.7 508.2 545.7 560.3 526.2 577.1 546.8
2022 567.9 521.5 625.5 469.8 582.6 627.3 630.4 474.0 544.1 609.6 526.6 572.1
2023 521.1 548.5 484.0 528.2 473.3 547.7 525.3 522.4 424.7 561.3 513.9 602.3

# plot
ax = dfp.plot(kind='bar', figsize=(12, 4), ylabel='Mean Page Views', xlabel='Year', rot=0)
_ = ax.legend(bbox_to_anchor=(1, 1.02), loc='upper left')

enter image description here

关于python - 如何创建按月分组的年度条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68738800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com