Пользовательское наведение курсора для точечной диаграммы по цвету

#python #pandas #plotly

Вопрос:

Я использую plotly и пытаюсь сделать диаграмму рассеяния, окрашенную переменной, используя другую переменную, чтобы указать, какой текст должен отображаться при наведении курсора мыши на определенную точку. Посмотри, что я попробовал:

 df = pd.DataFrame({
    'class': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'], 
    'coord_x': [4,5,6,3,1,-1,9,0,3.5,2], 
    'coord_y': [11,32,48,22,12,29,32,54,19,21],
    'description':['some description for A', 'something else for A', 'other description for A', 'AAA', 'aaa', 'bbb', 'bbb', 'description for C', 'cccc', 'cc']
})

fig = px.scatter(df, x="coord_x", y="coord_y", color="class")
fig.update_traces(hovertemplate="Hover_text: %{text}",
        text=[d for d in df.description.values.tolist()])

fig.show()
 

Код, кажется, работает, но он работает только с точками «A», хотя «B» и «C» не имеют одного и того же описания в моем фрейме данных pandas.
Как я должен решить эту проблему?

Ответ №1:

Использовали графические объекты, а не графически выраженные

  • основной метод заключается в преобразовании переменной класса в число
  • используемый индекс из массива уникальных значений
 import plotly.graph_objects as go

df = pd.DataFrame({
    'class': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'], 
    'coord_x': [4,5,6,3,1,-1,9,0,3.5,2], 
    'coord_y': [11,32,48,22,12,29,32,54,19,21],
    'description':['some description for A', 'something else for A', 'other description for A', 'AAA', 'aaa', 'bbb', 'bbb', 'description for C', 'cccc', 'cc']
})

# color needs to be a number, use index of unique values
go.Figure(data=go.Scatter(x=df.coord_x, y=df.coord_y, hoverinfo="text", text=df.description, mode="markers", 
                          marker={"color":df["class"].apply(lambda v: np.where(v==df["class"].unique())[0][0])}))

 

Ответ №2:

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

 fig = px.scatter(df, x="coord_x", y="coord_y", color="class",hover_name='description')
 

Например:

введите описание изображения здесь

Комментарии:

1. Спасибо, но я не хочу «class=C, coord_x = 2, coord_y = 21» там, просто «Hover_text: cc»