Установка длины для наведения текста на сюжетном графике Dash Scatter - PullRequest
0 голосов
/ 22 марта 2019

У меня есть точечная диаграмма в Dash, где свойство text (устанавливает текст, отображаемый при наведении курсора) настроено так, чтобы брать текст из определенного столбца в кадре данных.

Проблема в том, что часть текста при наведении слишком длинная и уходит со страницы.Есть ли способ придать длине наведения фиксированную длину, чтобы этого не произошло?

Я видел, как это делается с использованием hoverformat для числовых данных.Но моя информация при наведении - текст.

1 Ответ

1 голос
/ 22 марта 2019

Я не очень уверен, есть ли атрибут для установки фиксированного размера для hoverinfo, но вы всегда можете выполнить некоторую предварительную обработку с помощью текстового списка перед его отображением, что намного проще, а также настраивается в зависимости от потребностей.

Вот один из способов сделать это,

import dash
from dash.dependencies import Input, Output
import dash_html_components as html
import dash_core_components as dcc
import plotly.graph_objs as go
import json
import pandas as pd

app = dash.Dash()


#Consider this as the dataframe to be shown in hover
L = ["Text A", "Text B", "Text C", "Text D", "Text E"]
df = pd.DataFrame({'col':L})


# Here write your custom preprocessing function, 
# We can do whatever we want here to truncate the list
# Here every element in the list is truncated to have only 4 characters
def process_list(a):
    return [elem[:4] for elem in a]

app.layout = html.Div([
    dcc.Graph(
        id='life-exp-vs-gdp',
        figure={
            'data': [
                go.Scatter(
                    x = [1,2,3,4,5],
                    y = [2,1,6,4,4],
                    #call the pre processing function with the data frame
                    text = process_list(df['col']),
                    hoverinfo = 'text',
                    marker = dict(
                        color = 'green'
                    ),
                    showlegend = False
                )
            ],
            'layout': go.Layout(
            )
        }
    )
])

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