Plotly: Как создать собственные метки наведения для фигур Plotly 3D Scatter? - PullRequest
1 голос
/ 15 апреля 2020

Я использую сюжет для построения графиков сходства между фильмами на основе их сюжета с использованием PCA. Так как это просто визуальное представление, которое я пытаюсь создать, мне не важно видеть значения PCA для каждой точки данных. Я просто хочу увидеть название фильма и, возможно, некоторые другие функции, такие как жанр и рейтинг. Значения x, y, z просто делают график беспорядочным.

Ниже приведен фактический используемый код, хотя у меня нет функции movie_similities, она просто возвращает фрейм данных return pd.DataFrame({'pca_0':np.array([0,1,2,3]), 'pca_1':np.array([0,1,2,3]),'pca_2':np.array([0,1,2,3]),'Title':np.array(['Fight Club','Mission: Impossible','Harry Potter'])})

import plotly.graph_objects as go
import numpy as np
import plotly.offline as pyo
pyo.init_notebook_mode()


    df = pd.DataFrame({'pca_0':np.array([0,1,2,3]), 'pca_1':np.array([0,1,2,3]),'pca_2':np.array([0,1,2,3]),'Title':np.array(['Fight Club','Mission: Impossible','Harry Potter'])})`
    fig = go.Figure(data=[go.Scatter3d(
        x=df.pca_0, # ie [0, 1, 2, 3]
        y=df.pca_1, # ie [0, 1, 2, 3]
        z=df.pca_2, # ie [0, 1, 2, 3]
        hovertext = df.Title, # ie ['Fight Club','Mission: Impossible','Harry Potter']
        mode='markers',
        marker=dict(
            size=8,
            opacity=0.8
        )
    )])

    fig.show()

1 Ответ

1 голос
/ 15 апреля 2020

Сосредоточение внимания на ...

Меня не очень интересует просмотр значений PCA для каждой точки данных. Я просто хочу увидеть название фильма

... правильная комбинация hovertemplate='<b>%{text}</b>' и text должна сработать`:

enter image description here

Полный код с образцом данных:

import plotly.graph_objects as go
import numpy as np
import plotly.offline as pyo
import pandas as pd
pyo.init_notebook_mode()


df = pd.DataFrame({'pca_0':np.array([4,1,2,3]),
                   'pca_1':np.array([9,11,12,13]),
                   'pca_2':np.array([0,5,1,8]),
                   'Title':np.array(['Fight Club','Mission: Impossible','Harry Potter', 'Star Wars'])})
fig = go.Figure(data=[go.Scatter3d(
    x=df.pca_0, # ie [0, 1, 2, 3]
    y=df.pca_1, # ie [0, 1, 2, 3]
    z=df.pca_2, # ie [0, 1, 2, 3]
    hovertemplate='<b>%{text}</b><extra></extra>',
    text = [title for title in df.Title],
    mode='markers',
    marker=dict(
        size=8,
        opacity=0.8
    )
)])

fig.show()
...