首页 > 解决方案 > Plotly:如何为 y 轴的不同间隔添加注释?

问题描述

我正在尝试根据 y 值的不同反转向 y 轴添加注释

if y > 0,我要给注解Flexion
if y < 0,我要给注解Extension

我尝试使用多类别来指定注释

我的代码如下所示

import plotly.graph_objects as go
import numpy as np 


x = np.arange(-10,10,1)
y = np.arange(-10,10,1)

y_annotation = [ 'Flexion' if data > 0 else 'Extension' for data in y ]

fig = go.Figure( data= go.Scatter(x=x,y=[y_annotation,y]) )

fig.show()

这将产生

像这样的图表

但我不希望线条将Flexision和分开Extension

这种方法会在 y 轴上给出详细的 y 值,这也是我不想拥有的

我想知道是否有另一种方法可以根据不同的间隔向 y 轴添加注释?

谢谢 !

标签: pythonplotly

解决方案


如果除了线条和详细的 y 轴之外,您对上面的设置感到满意,那么您可以放弃多索引方法,只需使用在适当的位置设置注释fig.add_annotation()

下图是使用下面的代码段生成的:

  1. fig.update_layout(margin=dict(l=150))使用,为左侧的注释腾出空间
  2. 将区间名称和数据存储在字典中,以及
  3. 计算每个指定区间的中间值,并且
  4. xref="paper"使用,将注释放置在 y 轴的左侧
  5. 不会弄乱 y 轴刻度线的值。

阴谋

在此处输入图像描述

完整代码:

import plotly.graph_objects as go
import numpy as np 


x = np.arange(-10,10,1)
y = np.arange(-10,10,1)

y_annotation = [ 'Flexion' if data > 0 else 'Extension' for data in y ]

intervals = {'Flexion':[0,10],
             'Extension':[0, -10]}


# plotly setup
fig = go.Figure( data= go.Scatter(x=x,y=y) )

# make room for annotations
fig.update_layout(margin=dict(l=150))

for k in intervals.keys():
    fig.add_annotation(dict(font=dict(color="green",size=14),
                            #x=x_loc,
                            x=-0.16,
                            y=(intervals[k][0]+intervals[k][1])/2,
                            showarrow=False,
                            text="<i>"+k+"</i>",
                            textangle=0,
                            xref="paper",
                            yref="y"
                           ))


fig.show()

推荐阅读