Наведите указатель мыши на гистограмму без вывода текста — plotly

#python #plotly #bar-chart

#python #plotly #гистограмма

Вопрос:

Я борюсь с чем-то, что, вероятно, довольно просто.
подумайте об этом: у меня есть идентификаторы единиц с данными для каждого идентификатора единицы.
Я хочу построить гистограмму и иметь возможность выбирать любой идентификатор единицы измерения, который я хочу.
Для этого я выбрал plotly px. Я строю столбцы в соответствии с некоторым методом разделения диапазона (используя pd.cut)
Полученный мной результат очень близок к тому, что я хочу.
когда я навожу курсор на разные единицы измерения на графике, я вижу идентификатор единицы измерения, диапазон и точное значение, но текст также отображается на графике и делает график очень запутанным.
Я пытался использовать другой px.bar, приписываемый замене%{text}%, но безуспешно.

Небольшой код, который воспроизводит график, который у меня есть

 import dash_core_components as dcc
import numpy as np
import pandas as pd
import dash
import dash_html_components as html
import plotly.express as px

data = np.random.rand(300)
unit_id = np.random.choice(range(1000), 300, replace=False)
data_tuple = sorted([(str(uid), data) for uid, data in zip(unit_id, data)], key=lambda x: x[1])

y_data = [y[1] for y in data_tuple]
x_data = [i for i in range(1, len(y_data)   1)]
range_bins = pd.cut(np.array(np.array(y_data).astype(float)), 10)
data_range_lbl = [str(v) for v in range_bins]

sorted_unit_id = [x[0] for x in data_tuple]
unit_id_text = [sorted_unit_id[i]   '<br><b>Value</b>: '   str(y_data[i]) for i in range(0, len(sorted_unit_id))]
fig = px.bar(x=data_range_lbl, y=[1 for i in range(0, len(data_range_lbl))], text=unit_id_text)

fig.update_layout(dragmode='select')
fig.update_traces(hovertemplate=
                  '<b>Die Id</b>: %{text}'  
                  '<br><b>Range</b>: %{x}<br>')
app = dash.Dash(__name__)
app.layout = html.Div([
    html.Div(id='container-button-timestamp'),
    dcc.Graph(
        id='sample-graph', figure=fig
    ),
])

if __name__ == '__main__':
    app.run_server(debug=True, port=8050)
  

как это выглядит:
введите описание изображения здесь

Ответ №1:

использование hovertext сделало свое дело.

удалены text из атрибутов px.bar:
fig = px.bar(x=data_range_lbl, y=[1 for i in range(0, len(data_range_lbl))])

и изменен рисунок.update_traces:

 fig.update_traces(
    hovertext=unit_id_text,
    hovertemplate=
    '<b>Die Id</b>: %{hovertext}'  
    '<br><b>Range</b>: %{x}<br>')