首页 > 解决方案 > 如何使用 python 集成下拉列表以选择带有数据透视表数据的条形图中的系列?

问题描述

我正在尝试为一些 IRS 税收数据创建可视化;由于数据的性质,我必须将其集成为数据透视表数据。我一直在摸索破折号和应用程序回调,但进展并不顺利。

对于数据中的单个系列,我绘制的内容本身就足够好,但数据集有很多不同的数据系列(即合伙企业和 S corp 收入、遗产和信托收入、特许权使用费收入、失业补偿等),我希望能够通过下拉选择;类似于这里的图片

我猜想弄清楚如何通过诸如 list(data.columns) 之类的东西自动解析列标题并对其进行范围分析会有所帮助,但弄清楚如何使用 app.callback 还没有解决(或者我可能没有'甚至不需要 app.callback 并且可以通过 plotly.graph_objects 使用 figure.update 来做到这一点?)

源数据: https ://github.com/ohiTuna/tax-data-viz/blob/main/taxthing4.csv

任何指导甚至推动相关示例的方向都将不胜感激。我对 python 还是很陌生(显然),所以翻阅 bokeh、dash 等的官方文档已经超出了我的想象。我猜我可以用 plotly 完成这一切,但这一切都是从学习散景开始的。

import numpy as np 
import pandas as pd 
import warnings
import matplotlib
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')
from bokeh.plotting import figure, show, output_file, output_notebook
import datetime

data = pd.read_csv('taxthing4.csv', parse_dates=['Date'])
data.head()
data.Date.min(), data.Date.max()
data.incomesize2.value_counts()
data['Year'] = data.Date.apply(lambda x: x.year)

wide = data.pivot(index='Date', columns='incomesize2', values='PartnershipAndScorpNetIncomeTotal')
wide.reset_index(inplace=True)
wide['Year'] = wide.Date.apply(lambda x: x.year)


temp_df = wide.groupby(['Year']).sum().reset_index()
temp_df.head()
cats = ['0 to 50k','50k to 200k','200k to 1mil','1mil and up'] 

source = ColumnDataSource(data=temp_df)
p = figure( plot_width=800, title="PartnershipAndScorpNetIncomeTotal",toolbar_location='above', tools=TOOLS)

p.vbar_stack(cats, x='Year', width=0.9, color=colors, source=source,
             legend=[value(x) for x in cats])

p.y_range.start = 0
p.yaxis.formatter.use_scientific = False
matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ','))
p.xaxis.axis_label = 'Year'
p.yaxis.axis_label = 'USD'

output_file("stacked_bar.html", title="Stacked Bar Chart")
show(p)

标签: pythonpandaspivotdropdownbokeh

解决方案


推荐阅读