python - Plotly-Dash:想要两个堆叠的条形图从单个 df 列并排
问题描述
我正在尝试并排放置两个堆叠的条形图,但无法弄清楚。
这是一个例子df:
Field Issue
Police Budget cuts
Research Budget cuts
Police Time consuming
Banking Lack of oversight
Healthcare Lack of support
Research Bureaucracy
Healthcare Bureaucracy
Banking Mistrust
我想要的是一个堆积条形图,首先是字段。它的高度为 8,由 2 名警察、2 次研究等细分。然后我想要第一个图表旁边的问题堆积条形图。第二个的高度为 8,并由 2 倍预算削减、1 倍耗时、1 倍缺乏监督等因素叠加。
我努力了:
获取所有字段的堆积条形图:
trace1 = go.Bar(
x = df.Field.unique(),
y = df.Field.value_counts(),
name='Total Amount of roles'
)
获得预算削减的堆积条形图(然后复制其他问题):
trace2 = go.Bar(
x = df.Field.unique(),
y = df[df['Issue'] == 'Budget cuts'].Field.value_counts(),
name='Budget cuts'
)
data = [trace1, trace2]
layout = go.Layout(barmode='stack')
fig = go.Figure(data=data, layout=layout)
py.plot(fig, filename='test.html')
但是上面的代码将两个图叠加到一个上。我想要堆栈的迹线 1 和堆栈的迹线 2。我也希望将其集成到 Dash 中,而不是单独进行,但老实说,这将是次要的。将不胜感激任何帮助!
解决方案
编辑 - 在评论中简短对话后,这是我的最新建议:
这是一个可能的解决方案,其中每列(字段或问题)堆叠的每个类别的每次出现计数:
阴谋:
代码:
如您所见,它不是很灵活,因为您必须go.Bar
为每个类别(银行、警察等)添加一个对象。但如果上面的情节是你要找的,我也会整理出那部分。
# import
import pandas as pd
import numpy as np
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)
#%qtconsole
# sample data
Field = ['Police', 'Research', 'Police', 'Banking', 'Healthcare', 'Research', 'Healthcare', 'Banking']
Issue = ['Budget cuts', 'Budget cuts', 'Time consuming', 'Lack of oversight', 'Lack of support', 'Bureaucracy', 'Bureaucracy', 'Mistrust']
# Put the lists in a pandas dataframe for
# easy grouping and indexing
df = pd.DataFrame([Field, Issue]).T
df.columns = ['Field', 'Issue']
grField = df.groupby('Field').count()
grIssue = df.groupby('Issue').count()
dfgr = pd.concat([grField, grIssue], axis = 1, sort = False)
dfgr = dfgr.T
# Make one go.Bar() object for each category
# for corresponing Field / Issue
trace1 = go.Bar(
x = ['Issue'],
#y = [dfgr['Field']],
y = [dfgr['Banking'].loc['Issue']],
name='Banking')
trace2 = go.Bar(
x = ['Issue'],
#y = [dfgr['Field']],
y = [dfgr['Healthcare'].loc['Issue']],
name='Healthcare')
trace3 = go.Bar(
x = ['Issue'],
#y = [dfgr['Field']],
y = [dfgr['Police'].loc['Issue']],
name='Police')
trace4 = go.Bar(
x = ['Issue'],
#y = [dfgr['Field']],
y = [dfgr['Research'].loc['Issue']],
name='Research')
trace5 = go.Bar(
x = ['Field'],
#y = [dfgr['Field']],
y = [dfgr['Budget cuts'].loc['Field']],
name='Budget cuts')
trace6 = go.Bar(
x = ['Field'],
#y = [dfgr['Field']],
y = [dfgr['Bureaucracy'].loc['Field']],
name='Bureaucracy')
trace7 = go.Bar(
x = ['Field'],
#y = [dfgr['Field']],
y = [dfgr['Lack of oversight'].loc['Field']],
name='Lack of oversight')
trace7 = go.Bar(
x = ['Field'],
#y = [dfgr['Field']],
y = [dfgr['Lack of oversight'].loc['Field']],
name='Lack of oversight')
trace8 = go.Bar(
x = ['Field'],
#y = [dfgr['Field']],
y = [dfgr['Lack of support'].loc['Field']],
name='Lack of support')
trace9 = go.Bar(
x = ['Field'],
#y = [dfgr['Field']],
y = [dfgr['Mistrust'].loc['Field']],
name='Mistrust')
trace10 = go.Bar(
x = ['Field'],
#y = [dfgr['Field']],
y = [dfgr['Time consuming'].loc['Field']],
name='Time consuming')
# gather data and set up layout
#data = [trace1, trace2, trace3, trace4, trace5, trace6, trace7, trace8, trace9, trace10]
data = [trace10, trace9, trace8, trace7, trace6, trace5, trace4, trace3, trace2, trace1]
layout = go.Layout(barmode='stack', title = 'Stacked bar chart from single column')
# Build figure
fig = go.Figure(data=data, layout=layout)
# PLot figure
iplot(fig, filename='test.html')
推荐阅读
- vue.js - 为 Vue 应用创建动态 .htaccess
- google-drive-api - 检索访问令牌时出错 FetchError:对 https://oauth2.googleapis.com/token 的请求失败,原因:读取 ECONNRESET
- corda - 更新 LinearState 时如何更新 PersistentState
- sql - 如何在 SAS 的 proc sql 查询中选择列名“startwith”
- excel - VBA - 宏记录器更改单元格颜色未按预期工作
- ios - 如何通过编程或脚本在 iPhone 中使用坐标进行触摸或滑动?
- amazon-web-services - 无法通过 SSH 连接到 EC2 实例并且无法放置 ECS 任务
- sharepoint - Word 文档搜索 - Sharepoint
- scikit-learn - 如何在一个 ColumnTransformerr 中为所有类型的特征、分类特征和数值特征组合管道?
- google-cloud-functions - 如何创建运行 gcloud 命令的函数?