密谋:如何控制双Y轴在前面的轨迹?

时间:2020-10-14 17:25:42

标签: python python-3.x plotly plotly-dash

我有一个类似的y轴双图:

enter image description here

在此示例中,条形图在辅助y轴上。但是,我希望线在酒吧的前面。我以为yaxis2=dict(overlaying='y1')可以解决问题,但是没有什么不同。到目前为止,我想出的唯一解决办法是降低条形的不透明度,以便您可以实际看到线条。当然,虽然有一种方法可以解决我丢失的问题。

1 个答案:

答案 0 :(得分:1)

答案:

第二个y轴上的轨迹将显示在顶部。无论是go.Scatter()跟踪还是go.Bar()跟踪

详细信息:

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

enter image description here

the docs中您可以看到:

覆盖父对象:layout.xaxis类型:枚举,(“ “ / ^ 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,
)

fig.show()

情节1:

enter image description here

代码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:

enter image description here