#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>')