繁体   English   中英

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

[英]Plotly: How to show all the stacked y axis data values while hovering for three y layout and one x axis shared graph?

python 3.6 最新 plotly 使用:python Graph 是使用 plotly 离线/在线函数创建的,其中三个不同的数据框输入用于 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.任何更好的优化方法。

预期结果:

在此处输入图片说明

在评论中进行了简短讨论后,此答案已被大量编辑


问题 1:

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

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

问题 2:

要更改悬停信息的显示方式,请使用fig['layout']['hovermode'] 这里的问题是,你的选择仅限于以下情况之一'x''y''closest' 如果您单击Compare data on hover选项,则无法将其设置回fig['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)

问题 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:

我一直在寻找一种方法来达到相同的结果,但尚未成功。

如果您找到答案,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM