【问题标题】:Lines from points to plot axes从点到绘图轴的线
【发布时间】:2021-10-01 17:44:07
【问题描述】:

请告诉我!如图所示,是否可以以某种方式将线添加到指向图形轴的点?当然,您可以手动进行。我搜索了文档但没有找到

【问题讨论】:

    标签: graph plotly settings


    【解决方案1】:

    Plotly 中没有任何东西可以自动添加此类注释。但是,您可以通过创建一个函数以动态方式手动执行此操作,该函数接收您要添加垂直和水平线的每个点。

    下面我重新创建了一个与您显示的相似的分段函数(逻辑+水平线段),隐藏了y轴,并使用注释在图中x=0处显示y轴,并添加了水平和垂直线到每个兴趣点。

    import numpy as np
    from math import e
    import plotly.graph_objects as go
    
    fig = go.Figure()
    
    ## reproduce your piecewise function
    x1 = np.linspace(-1,1,500)
    y1 = 1 / (1 + e**(2.5*(1.5-x1)))
    
    x2 = np.linspace(1,1.5,500)
    y2 = [0.5]*500
    
    x3 = np.linspace(1.5,3,500)
    y3 = 1 / (1 + e**(5*(1.0-x3)))
    
    fig.add_trace(go.Scatter(x=x1,y=y1,line=dict(color="red")))
    fig.add_trace(go.Scatter(x=[1],y=[0.5],mode='markers',line=dict(color="red")))
    fig.add_trace(go.Scatter(x=x2,y=y2,line=dict(color="red")))
    fig.add_trace(go.Scatter(x=[x3[0]],y=[y3[0]],mode='markers',line=dict(color="red")))
    fig.add_trace(go.Scatter(x=x3,y=y3,line=dict(color="red")))
    fig.update_layout(template="simple_white", showlegend=False)
    
    ## remove yaxis but set the range
    fig.update_yaxes(range=[0, 1.1], visible=False)
    
    ## add custom yaxis at x=0
    fig.add_vline(x=0, line_width=1, line_color="black")
    for y_tick in np.linspace(0,1,6):
        fig.add_trace(go.Scatter(
            x=[-0.01,0.01],
            y=[y_tick]*2,
            mode="lines+text",
            name=None,
            hoverinfo='none',
            text=[f'{y_tick:.1f}'],
            textposition="top left",
            line=dict(color="black", width=1)
        ))
    
    ## function to add horizontal and vertical lines for points
    def add_horizontal_and_vertical_lines(fig, x_val, y_val):
        fig.add_trace(go.Scatter(
            x=[x_val]*2,
            y=[0,y_val],
            mode="lines",
            hoverinfo='none',
            line=dict(color="grey", width=0.5)
        ))
        fig.add_trace(go.Scatter(
            x=[0,x_val],
            y=[y_val]*2,
            mode="lines",
            hoverinfo='none',
            line=dict(color="grey", width=0.5)
        ))
    
    ## loop through the points of interest
    for x_point,y_point in zip([x1[-1],x1[-1],x2[-1],x2[-1],x3[-1]],[y1[-1],y2[0],y2[-1],y3[0],y3[-1]]):
        add_horizontal_and_vertical_lines(fig, x_point, y_point)
    
    fig.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多