Python - Plotly,Dash 问题 - 基于值的自定义标签和颜色

问题描述

我有以下代码,我是 Plotly、dash 和 Pandas 的新手,所以我希望有人能够帮助我。我追求三件事:

  1. 第二个 Y 行,其中包含来自 df['scoreMaths'] 的数据
  2. 一个图例,用来设置文本的颜色
  3. 根据值(字典地图?)对条形进行颜色编码包括我的尝试。

我希望有人能够帮助我。谢谢

import pandas as pd
from dash import Dash
import dash_html_components as html
import numpy as np
import dash_core_components as dcc
import plotly.express as px
from dash.dependencies import Output,Input
df1 = pd.read_csv("maths-test.csv")
df2 = pd.read_csv("reading-test.csv")
df1 = df1.rename(columns={"score":"scoreMaths"})
df2 = df2.rename(columns={"score":"scoreReading"})
#df = df1.copy()
df = df1.merge(df2,on='ID')
#How to show those who dont match Todo: df1[~(df1['ID']==df2['ID'])]
#Then for the ID from df2 df2[~(df1['ID']==df2['ID'])]
#id_not_in_df1 = df1[~(df1['ID']==df2['ID'])]
#id_not_in_df2 = df2[~(df1['ID']==df2['ID'])]
#print(id_not_in_df1)
Index_by_username = df.set_index("ID")
sorted_df = df.sort_values(by="ID")
Person = pd.concat([df['ID']]).unique()
app = Dash("my app")
app.layout = html.Div([
    html.H1("Graph Analysis of Person Data."),dcc.Dropdown(
        id="option",options=[{"label":str(i),"value":i} for i in df["ID"]],value=df["ID"][0]
    ),dcc.Graph(id="chart")
])
##############################
Test Functions - Map
##############################
def SetColor(y):
        if(y <= 1):
            return "red"
        elif(y <= 2):
            return "orange" 
        elif(y <= 3):
            return "yellow"
        elif(y <= 4):
            return "lightgreen"
        elif(y <= 5 or y <= 6):
            return "green"
        elif(y <= 7):
            return "darkgreen"
        elif(y <= 8):
            return "silver"
        elif(y <= 9):
            return "gold"
def Setlabel(y):
        if(y <= 1):
            return "Very low (1)"
        elif(y <= 2):
            return "Low (2)" 
        elif(y <= 3):
            return "Below average (3)"
        elif(y <= 4):
            return "Average (4)"
        elif(y <= 5 or y<= 6):
            return "Average (5,6)"
        elif(y <= 7):
            return "Above average (7)"
        elif(y <= 8):
            return "High (8)"
        elif(y <= 9):
            return "Very High (9)"

labels = ['Very low (1)','Low','Below average (3)','Average(4)','Adverage (5,6)','Above average (7)','High (8)','Very High (9)']
colors = {'Very low (1)': 'red','Low (2)': 'orange','Below average (3)': 'yellow','Average (4)': 'lightgreen','Average (5,6)': "green",'Above average (7)': 'darkgreen','High (8)': 'silver','Very High (9)': 'gold'}
color_map = {
    1: 'red',2: 'orange'
}
#######################################

@app.callback(
    Output(component_id="chart",component_property="figure"),Input(component_id="option",component_property="value"))
def on_option(option):
    trace3 = px.bar(x = df["ID"],y = df["scoreMaths"])
    return px.bar(df,x=df["ID"],y=df['scoreReading'],color_discrete_map={
    2 :"#0064FF",4:"rgba(0,100)","3":"#0064FF"}).update_yaxes(title_text="<b>secondary</b> yaxis title",secondary_y=True).add_trace(df['scoreMaths'],secondary_y=True)

    #.update_traces(marker = dict(color=list(map(SetColor,df['scoreReading']))))#
    #.update_traces(marker = dict(color=list(map(SetColor,df['scoreReading']))))
#px.bar(df,y=df["scoreReading"],facet_col=df["scoreMaths"]
    #.update_traces(color=color_map[df['scoreReading'].to_ceil])
    #.update_traces(marker = dict(color=list(map(SetColor,df['scoreReading'])))).update_layout(legend = dict(list(map(Setlabel[df['score']]))))
    #.update_layout(font_family="Rockwell",marker=dict(colors[labels]))
#color_continuous_scale="Viridis",range_color=(0,7))

if __name__ =='__main__':
    app.run_server()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...