亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

情節:使用字典分配顏色不起作用,懸停信息不正確

情節:使用字典分配顏色不起作用,懸停信息不正確

慕容森 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條經驗 獲得超8個贊

仍然不太確定你在嘗試什么,但這是發生了什么:


如果你看一下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 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號