首页 > 解决方案 > ValueError:错误的项目数通过 3,位置暗示 1

问题描述

我想绘制 plotly express 分组条形图,以显示每个十年的出生人数,就像这张图一样

pivot_dayofweek=final.pivot_table(values='births',index='dayofweek',columns='decade',aggfunc='mean')    



pivot_dayofweek=pivot_dayofweek.loc[['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']]
pivot_dayofweek

pivot_dayofweek 数据框

px.bar(pivot_dayofweek,x=pivot_dayofweek.index,y=pivot_dayofweek.values,barmode='group')

但是当我运行上面的代码时,它给了我一个错误点击显示错误

标签: pythonpandasplotlydata-visualizationplotly-express

解决方案


  • 有模拟数据集和数据透视表
  • 最简单的方法是重组枢轴数据框以准备好进行绘图
    1. stack() 十年列到索引中
    2. reset_index()制作索引列
    3. 十年设为字符串以防止将其视为连续
import pandas as pd
import numpy as np
import plotly.express as px

df = pd.DataFrame({"date": pd.date_range("1-jan-1960", "31-dec-1989", freq="D")}).pipe(
    lambda d: d.assign(
        births=np.random.uniform(1, 5, len(d)),
        dayofweek=d["date"].dt.strftime("%A"),
        decade=d["date"].dt.year - d["date"].dt.year % 10,
    )
)

dfp = df.pivot_table(
    values="births", index="dayofweek", columns="decade", aggfunc="sum"
)

px.bar(
    dfp.stack().reset_index().assign(decade=lambda d: d["decade"].astype(str)),
    color="decade",
    x="dayofweek",
    y=0,
    barmode="group",
).update_layout(title="No of birth in day in every decade", yaxis={"title":"Births"})

在此处输入图像描述


推荐阅读