Pandas & Plotly: как получить доступ к столбцам данных в тексте при наведении, которые не используются для построения точки? - PullRequest
2 голосов
/ 16 апреля 2019

Документы Plotly показывают hovertemplate , который обеспечивает доступ к значениям x & y в тексте, но как мы можем получить доступ к данным в других столбцах?

Импорт:

import pandas as pd  
import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot

Код:

test_data = {"client1-percent":[90,100,60]
             , "client1-volume":[500000,3542,20000]
             , "client2-percent":[99,63,98]
             ,"client2-volume":[6423,6524,5737]
            }
df = pd.DataFrame(test_data)

data = [go.Scatter(
    x = df.index.values
    , y = df.loc[:,col].values
    , hovertemplate = "Percent: %{y:.1f}% | Volume: {}"
    , mode = 'lines+markers'
    , name = col.replace("-percent","")
) for col in df.columns if "-volume" not in col]

plot(data, filename='test.html')

enter image description here

Таким образом, конкретный вопрос здесь заключается в следующем: как можно добавить объем клиента к тексту в этом сюжетеподсказка?

1 Ответ

2 голосов
/ 16 апреля 2019

Хорошо, я думаю, у меня есть то, что вы хотите. Мне пришлось изменить имя client3-volume на client2-volume, чтобы я мог получить его с некоторой логикой из понимания списка. Я создал текстовый объект в объектах Scatter и передал и у, и текст в шаблон hovertemplate через hoverinfo. Если у вас есть более умный способ получить от вас df столбцы тома, связанные с клиентскими процентными столбцами, вы можете изменить text = ... на любой, который будет отправлять вам нужные данные.

test_data = {"client1-percent":[90,100,60]
             , "client1-volume":[500000,3542,20000]
             , "client2-percent":[99,63,98]
             ,"client2-volume":[6423,6524,5737]
            }

df = pd.DataFrame(test_data)

data = [go.Scatter(
    x = df.index.values
    , y = df.loc[:,col].values
    , text = df[col.replace('-percent','-volume')].values
    , hoverinfo = 'y+text'
    , hovertemplate = "Percent: %{y:.1f}% | Volume: %{text}"
    , mode = 'lines+markers'
    , name = col.replace("-percent","")
) for col in df.columns if "-volume" not in col]

plot(data, filename='test.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...