我已經在破折號上創建了直方圖,如果我從下拉菜單中選擇項目名稱,直方圖會根據項目的階段而變化,現在我想為項目的每個階段分配顏色,否則它將隨機分配顏色。我的第二個問題是直方圖的懸停文本。我的輸出如下:所以在這個輸出中,如果我從下拉菜單中選擇了 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 的圖形工廠甘特圖。
添加回答
舉報
0/150
提交
取消