首页 > 解决方案 > Plotly:如何控制双 y 轴前面的轨迹?

问题描述

我有一个看起来像这样的双 y 轴图:

在此处输入图像描述

在此示例中,条形图位于辅助 y 轴上。但是,我希望这条线在酒吧前面。我认为这样做yaxis2=dict(overlaying='y1')可以解决问题,但没有发生任何不同。到目前为止,我提出的唯一 hackish 解决方案是将条形上的不透明度调低,这样您就可以真正看到线条。当然,虽然有一种方法可以解决我缺少的这个问题。

标签: pythonpython-3.xplotly

解决方案


回答:

辅助 y 轴上的轨迹将出现在顶部。不管是go.Scatter()痕迹还是go.Bar()痕迹

细节:

overlaying属性仅适用于具有两个以上 y 轴的情况,如下所示

在此处输入图像描述

文档中您可以看到:

覆盖父级:layout.xaxis 类型:枚举,其中之一 ("free" | "/^x([2-9]|[1-9][0-9]+)?$/" | "/^y( [2-9]|[1-9][0-9]+)?$/" ) 如果设置同字母轴 id,则该轴覆盖在相应同字母轴的顶部,带有迹线和轴对两个轴都可见。如果为“False”,则此轴不覆盖任何相同字母的轴。在这种情况下,对于具有重叠域的轴,只有编号最高的轴可见。

那么,你的案子呢?通常,轨迹按添加到fig. 但对于具有两个 y 轴的图形,则不然。看来您必须使用在主轴上显示的跟踪进行切换。第一个片段生成一个在主轴上带有条形的图形。第二个片段在辅助轴上产生了一个带有条形的图形。这也决定了哪条迹线显示在顶部。

代码 1:

import plotly.graph_objects as go
from plotly.subplots import make_subplots

# Create figure with secondary y-axis
fig = make_subplots(specs=[[{"secondary_y": True}]])

# Add traces
fig.add_trace(
    go.Bar(x=[1, 2, 3], y=[40, 50, 60], name="yaxis data"),
    secondary_y=True,
)

fig.add_trace(
    go.Scatter(x=[1, 2, 3], y=[45, 50, 45], name="yaxis2 data"),
    secondary_y=False,
)

图.show()

情节1:

在此处输入图像描述

代码 2:

import plotly.graph_objects as go
from plotly.subplots import make_subplots

# Create figure with secondary y-axis
fig = make_subplots(specs=[[{"secondary_y": True}]])

# Add traces
fig.add_trace(
    go.Bar(x=[1, 2, 3], y=[40, 50, 60], name="yaxis data"),
    secondary_y=False,
)

fig.add_trace(
    go.Scatter(x=[1, 2, 3], y=[45, 50, 45], name="yaxis2 data"),
    secondary_y=True,
)


fig.show()

情节2:

在此处输入图像描述


推荐阅读