情节:如何在悬停三个y布局和一个x轴共享图时显示所有堆叠的y轴数据值?

Mar*_*abu 5 graph python-3.x timeserieschart plotly

python 3.6最新可绘图使用:python Graph是使用可绘图离线/在线功能创建的,其中三个不同的数据框输入用于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)
Run Code Online (Sandbox Code Playgroud)

1,上面的代码需要做哪些更改以在鼠标悬停时显示所有三个布局数据值。当前仅显示一个布局图值。

2.如何在右侧或顶部,底部或左侧显示图形数据点,而不是在图形上显示图形数据。

3.任何更好的优化方法。

预期结果:

在此处输入图片说明

ves*_*and 2

经过评论中的简短讨论后,此答案已被大量编辑


问题一:

经过各种尝试,目前看来这是不可能的。然而github上有一个问题

他们希望悬停标签出现在具有共享 x 轴的所有 y 轴上的所有迹线上。现在,它们仅出现在您悬停的子图中。

问题2:

要更改悬停信息的显示方式,请使用fig['layout']['hovermode']这里的问题是您的选项仅限于以下选项之一'x''y'或。如果您单击该选项,则无法在不再次运行代码的情况下将其设置回原来的状态。您还可以使用 更改每个系列的信息显示方式。在这里,您可以在列表中插入多个选项,例如或。 'closest'Compare data on hoverfig['layout']['hovermode'] = 'y'fig['data'][ser]['hoverinfo']= 'all'xx+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)
Run Code Online (Sandbox Code Playgroud)

问题3:

很抱歉,我不知道有任何其他优化方法可以做到这一点。