python 在Plotly中将次百分比y轴与主y轴对齐

uhry853o  于 2023-08-02  发布在  Python
关注(0)|答案(3)|浏览(156)

我使用Plotly创建一个图形,其中主y轴上有两条线,次y轴上有一个条形图,显示line 2/line 1的比例。
代码工作正常,但它创建了太多的参考行(1000、2000、3000…和1% 2% 3%...右轴)。

**是否可以将它们对齐?**例如,1000和1%将共享相同的参考线,或始终对齐左轴和右轴的任何其他方式。

下面是代码和生成的图形:

fig = make_subplots(specs=[[{'secondary_y': True}]])
    
    fig.add_trace(go.Scatter(x=data['date'], y=data['y1'],
                    mode='lines+markers',
                    name='Y1'), secondary_y=False)
    
    fig.add_trace(go.Scatter(x=data['date'], y=data['y2'],
                    mode='lines+markers',
                    name='Y2'), secondary_y=False)
    
    fig.add_trace(go.Bar(x=data['date'], y=data['pct'],
                    name='PCT', opacity=0.5), secondary_y=True)
    
    fig.update_layout(title=f'Graph', yaxis2=dict(tickformat='.2%'))

字符串
x1c 0d1x的数据

gmxoilav

gmxoilav1#

我可以通过将两个轴范围模式设置为零,然后更改比例,使1k与1%对齐,2k与2%对齐等方式使其工作

fig.update_yaxes(rangemode='tozero', scaleanchor='y', scaleratio=1, constraintoward='bottom', secondary_y=True)
fig.update_yaxes(rangemode='tozero', scaleanchor='y2', scaleratio=0.00001, constraintoward='bottom', secondary_y=False)

字符串


的数据

ruyhziif

ruyhziif2#

一种方法是确保两个y轴具有相同数量的刻度,并且每个刻度之间具有相等的相对空间。下面是一个示例:

fig.update_layout(yaxis1_tickvals = [40, 70, 100], yaxis2_tickvals = [4, 4.5, 5])

字符串

图一:


的数据
如果没有添加,下面的代码示例将生成以下图:

图二:


完整代码:

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.Scatter(x=[1, 2, 3], y=[40, 50, 100], name="yaxis data"),
    secondary_y=False,
)

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

# Add figure title
fig.update_layout(
    title_text="Double Y Axis Example"
)

# Set x-axis title
fig.update_xaxes(title_text="xaxis title")

# Set y-axes titles
fig.update_yaxes(title_text="<b>primary</b> yaxis title", secondary_y=False)
fig.update_yaxes(title_text="<b>secondary</b> yaxis title", secondary_y=True)

# fig.update_layout(yaxis1_tickvals = [40, 70, 100], yaxis2_tickvals = [4, 4.5, 5])

fig.show()

dz6r00yl

dz6r00yl3#

如果你使用的是最近的plotly(我确认的版本>= 5.15.0),那么将次要y轴与主要y轴对齐的简单方法。请参阅doc

fig.update_layout(
    yaxis2=dict(
        tickmode="sync",
    ),
)

字符串

相关问题