Custom position of text marker in a scatterpolar graph

I am trying to get the marker value outside of the graph area, as I feel like the text is kind of getting on the way of the lines. I have not been able to find a solution to my issue, and I am starting to wonder whether it is actually possible!

I have messed around with the textposition parameter but it does not make the trick unfortunately.

Here is what I have:

fig_reflexion.add_trace(go.Scatterpolar(
        mode='lines+text',
        theta=theta,
        r=r,
        textposition='top right',
        textfont=dict(
            size=16,
            family='Arial',
            color=text_colors,
        ),
        text=df_reflexion["r"],
        fillcolor='#d3d3d3',
        marker=dict(color='darkblue'),
        fill='toself'
    ))

    fig_reflexion.update_layout(autosize=False,
                                height=375,
                                polar=dict(radialaxis=dict(visible=False),
                                           angularaxis=dict(rotation=180, direction="clockwise")
                                           )
                                )
    fig_reflexion.update_layout(
        template=None,
        polar=dict(bgcolor="rgba(255, 255, 255, 0.2)"), )

    fig_reflexion.update_layout(
        font=dict(
            size=16,
            color="black",
            family="Courier New, monospace",

        ),
        title="Réflexion",
        title_font_family="Courier New, monospace",

    )

and here is the results:
Screenshot from 2023-02-07 08-02-36

and what I am trying to achieve: (see how the numerical values are outside of the circle
Screenshot from 2023-02-07 08-03-34

@peyo
It is difficult to display annotations in a polar plot, because the plot is referenced to a polar system of coordinates, i.e. (r, theta), while annotations ouside the outermost circle must be given in 'paper coordinates. My attempt to test a workaround for your plot, was hampered by the way you chose the origin and direction on the polar system ( angularaxis=dict(rotation=180, direction=“clockwise”`):

Why not working with the usual polar system?
Here is what I got with your settings:

import plotly.graph_objects as go
import numpy as np

fig_reflexion=go.Figure()
fig_reflexion.add_trace(go.Scatterpolar(
        mode='lines',
        theta=[60, 110, 270],
        r=[0.7, 0.6, 0.85],
        fillcolor='#d3d3d3',
        marker_color='darkblue',
        line_width=0,
        fill='toself'
    ))
fig_reflexion.update_layout(polar=dict(radialaxis=dict(visible=False),
                            angularaxis=dict(rotation=180, direction="clockwise", #WHY THIS ODD origin and direction?!!!!
                                                         showgrid=False, showticklabels=True)))
fig_reflexion.update_layout(
        title="Réflexion",
        template=None,
        polar=dict(bgcolor="rgba(255, 255, 255, 0.2)"), )
def set_annotation(x_text_position, y_text_position, annotation_text,   fontsize=14): 
    return dict(x=x_text_position,  
                y=y_text_position,    
                xref='paper',
                yref='paper',
                text= annotation_text,      
                font= dict(size=fontsize),  
                showarrow=False )
# We define annotation text  position in paper coordinates, taking into account that the plot is mapped to the square `[0,1]x[0,1]` in these coords. As a consequence, we take as text position a few points on the circle centered at `(0.5, 0.5)`, and radius chosen by trial and error
theta=[60, 110, 270]
t = np.pi*np.array(theta, dtype=float)/180
#Circle equations on which angles go in the odd diretion set in code!!!!!  (Omg!!!!)
ra=0.7
xt = 0.5 + ra * np.cos(t -np.pi) 
yt = 0.5 - ra * np.sin(t- np.pi)
annotation_text=["80<br><br>Analytique", "51<br><br>Analogique>", 
                 "94<br>Affective"]
fig_reflexion.layout.annotations = [set_annotation(xt[k], yt[k], f'<b>{annotation_text[k]}</b>') for k in range(len(t))]

This is the resulted plot:

You can also set each text position individually:

xt1 = 0.5 + ra1*cos....
yt1 =0.5   - ra1*sin....

i.e. to use different radius f'ra{k}' for each text. If moreover you are setting layout width and height, these values for ra, acceptable for a plot with default width and height, must be changed :frowning: