График разброса в Python, цвет маркера берется из фрейма данных

У меня есть следующий фрейм данных, для которого я хочу создать график разброса:

dict1 = {'Name':['Tom', 'nick', 'krish', 'jack','jill'], 
        'Last':[20, 21, 19, 18,15],
         'Change':[-1,-5,1,3,-5],
        'Color':['#30C030', '#9acd32', '#f08080','#FF1E3E','#FF1E3E']}

df = pd.DataFrame(dict1)

Я хотел бы, чтобы цвет маркера был точным цветом для каждого элемента, указанного в столбце «цвет», однако, когда я использую следующее, он назначает цвета по умолчанию на основе значения в этом столбце, а не назначает фактический цвет в списке:

fig = px.scatter(df, x = 'Last', y = 'Change', template = 'plotly_dark', 
             text = 'Name', color = 'Color'
            )
fig.update_traces(textposition='bottom center')
fig


person Ben H    schedule 15.01.2021    source источник


Ответы (1)


Вы также можете сделать это, установив параметр color_discrete_sequence=df['Color'].
Вы определяете здесь дискретные цвета, которые будут использоваться:

import pandas as pd
import plotly.express as px

dict1 = {'Name': ['Tom', 'nick', 'krish', 'jack','jill'], 
         'Last': [20, 21, 19, 18,15],
         'Change': [-1,-5,1,3,-5],
         'Color': ['#30C030', '#9acd32', '#f08080','#FF1E3E','#FF1E3E'],}

df = pd.DataFrame(dict1)

fig = px.scatter(
    df, 
    x='Last', y='Change', 
    text='Name', 
    color='Name', 
    color_discrete_sequence=df['Color'],
)

fig.update_traces(textposition='bottom center')

Этот вопрос + ответы содержат те же идеи:
Сюжет: как назначить определенные цвета для категорий?

Там также предлагается использовать параметр color_discrete_map, где вы специально сопоставляете имена с цветами.

person Sander van den Oord    schedule 15.01.2021