PYTHON Подробно показывает, как отображать все данные с накоплением по оси Y при наведении курсора мыши на макет с тремя осями и один общий график по оси X

Последняя использованная графика python 3.6: График python создается с использованием функции графика в автономном режиме / онлайн, в которой для построения оси Y используются три различных входа данных, а ось x используется совместно (как правило, это индекс даты). Графики в порядке.

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

eq_high = go.Scatter(
                    x=df.index,
                    y=df['High'],
                    name = "EQHigh",
                    line = dict(color = '#3EBF06'),
                    opacity = 0.8)

    eq_low = go.Scatter(
                    x=df.index,
                    y=df['Low'],
                    name = "EQLow",
                    line = dict(color = '#FD2D00'),
                    opacity = 0.8)

    ##
    op_high_ce = go.Scatter(
                    x=stock_opt_ce.index,
                    y=stock_opt_ce['High'],
                    name = "OpHighCE",
                    line = dict(color = '#15655F'),
                    opacity = 0.8)

    op_low_ce = go.Scatter(
                    x=stock_opt_ce.index,
                    y=stock_opt_ce['Low'],
                    name = "OpLowCE",
                    line = dict(color = '#0D7B7F'),
                    opacity = 0.8)

    op_last_ce = go.Scatter(
                    x=stock_opt_ce.index,
                    y=stock_opt_ce['Last'],
                    name = "OpLastCE",
                    line = dict(color = '#6AA6A2'),
                    opacity = 0.8)


    op_settlePr_ce = go.Scatter(
                    x=stock_opt_ce.index,
                    y=stock_opt_ce['Settle Price'],
                    name = "OpSettlePrCE",
                    line = dict(color = '#2AADD1'),
                    opacity = 0.8)

    ##
    op_high_pe = go.Scatter(
                    x=stock_opt_pe.index,
                    y=stock_opt_pe['High'],
                    name = "OpHighPE",
                    line = dict(color = '#FA6300'),
                    opacity = 0.8)

    op_low_pe = go.Scatter(
                    x=stock_opt_pe.index,
                    y=stock_opt_pe['Low'],
                    name = "OpLowPE",
                    line = dict(color = '#AC4C0D'),
                    opacity = 0.8)

    op_last_pe = go.Scatter(
                    x=stock_opt_pe.index,
                    y=stock_opt_pe['Last'],
                    name = "OpLastPE",
                    line = dict(color = '#E19B6D'),
                    opacity = 0.8)

    op_settlepr_pe = go.Scatter(
                    x=stock_opt_pe.index,
                    y=stock_opt_pe['Low'],
                    name = "OpSettlePrPE",
                    line = dict(color = '#A54E1F'),
                    opacity = 0.8)

     data = [eq_high,eq_low,op_high_ce,op_low_ce,op_settlePr_ce,op_high_pe,op_low_pe,op_settlepr_pe]

    #custome Date Range plotting
    layout = dict(
        title = "Graph",
        xaxis = dict(
            range = ['2017-10-1','2017-11-27'])
    )

    fig = dict(data=data, layout=layout)
    iplot(fig, filename = "CorrelationOfEquityAndOptionData")
    plot(fig,show_link = False)

1. Какие изменения необходимо внести в приведенный выше код, чтобы показать все три значения данных макета при наведении курсора мыши. В настоящее время он показывает только одно значение графа макета.

2.Как отображать данные графика на правой или верхней стороне, нижней или левой стороне, а не показывать данные графика на графике.

3. Любой лучше оптимизированный способ сделать это.

Обратитесь к изображению ниже для получения информации о текущем и ожидаемом выходных данных. НАЖМИТЕ, чтобы просмотреть: текущий и ожидаемый выходные данные в формате imageFormat.

2 ответа

Этот ответ был сильно отредактирован после краткого обсуждения в комментариях


Вопрос 1:

После различных попыток кажется, что это невозможно в данный момент. Однако на github существует проблема:

Они хотели бы, чтобы метки наведения появлялись на всех трассах по всем осям Y с общими осями X. Прямо сейчас они появляются только в том участке, в котором вы находитесь.

Вопрос 2:

Чтобы изменить способ отображения hoverinfo, используйте fig['layout']['hovermode'], Проблема здесь в том, что ваши варианты ограничены одним из следующих: 'x', 'y' или 'closest', И если вы нажмете Compare data on hover вариант, нет способа вернуть его обратно fig['layout']['hovermode'] = 'y' без запуска вашего кода снова. Вы также можете изменить способ отображения информации для каждой серии, используя fig['data'][ser]['hoverinfo']= 'all', Здесь вы можете вставить несколько вариантов, таких как x или же x+y в списке.

Вот пример с некоторыми случайными данными:

# imports
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import pandas as pd
import plotly.graph_objs as go
import numpy as np

# setup
init_notebook_mode(connected=True)

# data
np.random.seed(1)
x = np.linspace(0, 1, 50)
y1 = np.cumsum(np.random.randn(50))
y0 = np.cumsum(np.random.randn(50))

# Data
trace0 = go.Scatter(
    x=x,
    y=y0,
)

trace1 = go.Scatter(
    x=x,
    y=y1,
)

# layout
layout = go.Layout(yaxis=dict(range=[-10,10])
)

# Plot
fig = go.Figure(data=[trace0, trace1], layout=layout)

# Edit hoveroptions
fig['layout']['hovermode'] = 'y'

for ser in range(0,len(fig['data'])):
    fig['data'][ser]['hoverinfo']= 'all'  


iplot(fig)

Вопрос 3:

Мне жаль говорить, что я не знаю другого оптимизированного способа сделать это.

Вопрос 1:

Самый простой способ — построить все 3 диаграммы на одной диаграмме, используя подграфики. Ниже приведен базовый код для создания подграфиков и получения всей информации о наведении.

      from plotly.subplots import make_subplots

fig=make_subplots(rows=3, cols=1, shared_xaxes=True)

fig.update_layout(hovermode='x unified')

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

Вопрос 2:

Я искал способ достичь того же результата, но пока не добился успеха.

Если вы найдете ответ, пожалуйста, дайте мне знать.

Другие вопросы по тегам