#python #pandas #data-visualization #plotly-python
#python #pandas #визуализация данных #plotly-python
Вопрос:
Документы 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')
Итак, конкретный вопрос здесь таков: как можно добавить объем клиента к тексту в этой всплывающей подсказке plotly?
Ответ №1:
Хорошо, я думаю, у меня есть то, что вы хотите. Мне пришлось изменить имя client3-volume
на client2-volume
, чтобы я мог использовать его с некоторой логикой из понимания списка. Я создал текстовый объект в Scatter objects и передал как y, так и текст в 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')
Комментарии:
1. Я исправил
client-3
опечатку. Спасибо за помощь!