为了账号安全,请及时绑定邮箱和手机立即绑定

情节:使用字典分配颜色不起作用,悬停信息不正确

情节:使用字典分配颜色不起作用,悬停信息不正确

慕容森 2021-11-02 13:52:29
我已经在破折号上创建了直方图,如果我从下拉菜单中选择项目名称,直方图会根据项目的阶段而变化,现在我想为项目的每个阶段分配颜色,否则它将随机分配颜色。我的第二个问题是直方图的悬停文本。我的输出如下:所以在这个输出中,如果我从下拉菜单中选择了 prj-1、prj2。我看到属于选定项目的 3 个阶段。但是 phase3 的悬停文本显示为“phase1”。三个条的颜色是相同的,即使我创建了颜色字典,我尝试使用以下几行,但结果我只看到直方图中所有条的一种颜色。:color_dict = {'phase1': '#9400D3', 'phase2': '#32CD32', 'phase3': '#FF8000','phase4': '#4682B4'}marker': {            'color': color_dict        }但如果我使用颜色作为列表,它可以工作,但它将颜色设置为随机标签:    marker': {            'color': ['#9400D3','#32CD32', '#FF8000','#4682B4']        }我的输出将是:这几乎是我想要的输出,但是悬停文本仍然是错误的并且颜色是随机分配的,例如,我想使用字典将绿色分配给阶段 1,将紫色分配给阶段 2 等等。这是完整的代码:import dashfrom dash.dependencies import Input, Outputimport dash_core_components as dccimport dash_html_components as htmlimport pandas as pddef gantt_fig(df,val):    if isinstance(val, str):        df = df.loc[df['prjID']==val]    else:        df = df[df['prjID'].isin(val)]    return dfdf = pd.DataFrame({'prjID': ['prj-1', 'prj-1','prj-2', 'prj-2', 'prj-2','prj-3', 'prj-3', 'prj-4'],               'prjPhase': ['phase1', 'phase2','phase1', 'phase3', 'phase2', 'phase2','phase1', 'phase4']})options = df['prjID'].unique()activities = df['prjPhase'].unique()app = dash.Dash()app.layout = html.Div([    dcc.Dropdown(id='my-dropdown',options=[{'label': name, 'value': name} for name in options],        value=options[0], multi=True),    dcc.Graph(id='my-graph')])@app.callback(Output('my-graph', 'figure'), [Input('my-dropdown', 'value')])def update_graph(dropdownproject):    fig = gantt_fig(df, dropdownproject)    df2= fig    color_dict = {'phase1': '#9400D3', 'phase2': '#32CD32', 'phase3': '#FF8000','phase4': '#4682B4'}    figure = {        'data': [        {            'x': df2['prjPhase'],            'text': df2['prjPhase'],            'type': 'histogram',            'marker': {                'color': color_dict            }}]}    return figureif __name__ == '__main__':    app.run_server(debug=True)谢谢。
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

仍然不太确定你在尝试什么,但这是发生了什么:


如果你看一下df2['prjPhase']你会看到


>>> df2['prjPhase']

0    phase1

1    phase2

2    phase1

3    phase3

4    phase2

Name: prjPhase, dtype: object

所以在使用直方图时,'x': df2['prjPhase']将计算该系列中每个唯一值的出现次数。由于有 3 个不同的值,X 轴将有 3 个垃圾箱,通过这样做,'text': df2['prjPhase']您将 5 个值传递给这些垃圾箱,因此名称错误。


'text': df2['prjPhase'].unique()会更合适(我仍然会检查它产生的顺序),至于颜色,'color': [color_dict[x] for x in df2['prjPhase'].unique()]将确保在每个跟踪中使用正确的颜色(如果您只列出列表,如果phase4出现没有phase3例如一个)。


如果您正在使用甘特图,我还会查看 plotly 的图形工厂甘特图。


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信