Текстовая позиция не отображается на графике - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь построить график точности обучения и тестирования моей нейронной сети, используя график. Я также хочу добавить маркер с текстом, который говорит, когда было максимальное значение каждого, но также отображает текст, который говорит, что это было за значение. Я попытался сделать что-то вроде в этом примере .

Здесь мой mcve:

import plotly.graph_objects as go

data = {
    'test acc':  [1, 2, 3, 4, 5, 6, 7, 9, 10],
    'train acc': [3, 5, 5, 6, 7, 8, 9, 10, 8]
}

fig = go.Figure()
color_train = 'rgb(255, 0, 0)'
color_test = 'rgb(0, 255, 0)'
assert len(data["train acc"]) == len(data["test acc"])
x = list(range(len(data["train acc"])))
fig.add_trace(go.Scatter(x=x,
                         y=data["train acc"],
                         mode='lines',
                         name='train acc',
                         line_color=color_train))
fig.add_trace(go.Scatter(x=x,
                         y=data["test acc"],
                         mode='lines',
                         name='test acc',
                         line_color=color_test))
# Max points
train_max = max(data["train acc"])
test_max = max(data["test acc"])
# ATTENTION! this will only give you first occurrence
train_max_index = data["train acc"].index(train_max)
test_max_index = data["test acc"].index(test_max)

fig.add_trace(go.Scatter(x=[train_max_index],
                         y=[train_max],
                         mode='markers',
                         name='max value train',
                         text=['{}%'.format(int(train_max * 100))],
                         textposition="top center",
                         marker_color=color_train))
fig.add_trace(go.Scatter(x=[test_max_index],
                         y=[test_max],
                         mode='markers',
                         name='max value test',
                         text=['{}%'.format(int(test_max*100))],
                         textposition="top center",
                         marker_color=color_test))

fig.update_layout(title='Train vs Test accuracy',
                  xaxis_title='epochs',
                  yaxis_title='accuracy (%)'
                  )
fig.show()

Однако мой выходной сигнал выглядит следующим образом: enter image description here

Как видите, значение не отображается, как в примере, который я нашел. Как я могу заставить его появиться?

1 Ответ

2 голосов
/ 12 февраля 2020

Если вы хотите выделить только несколько определенных значений, используйте add_annotation(). В вашем случае просто найдите максимальное и минимальное Y для X, которые вы хотели бы сфокусировать. Не имея выборки данных с вашей стороны, вот как я могу это сделать с помощью обобщенного c образца данных:

Сюжет:

enter image description here

Код:

import plotly.graph_objects as go
import plotly.io as pio

pio.renderers.default='browser'

fig = go.Figure()

xVars1=[0, 1, 2, 3, 4, 5, 6, 7, 8]
yVars1=[0, 1, 3, 2, 4, 3, 4, 6, 5]


xVars2=[0, 1, 2, 3, 4, 5, 6, 7, 8]
yVars2=[0, 4, 5, 1, 2, 2, 3, 4, 2]

fig.add_trace(go.Scatter(
    x=xVars1,
    y=yVars1
))


fig.add_trace(go.Scatter(
    x=xVars2,
    y=yVars2
))

fig.add_annotation(
            x=yVars1.index(max(yVars1)),
            y=max(yVars1),
            text="yVars1 max")
fig.add_annotation(
            x=yVars2.index(max(yVars2)),
            y=max(yVars2),
            text="yVars2 max")
fig.update_annotations(dict(
            xref="x",
            yref="y",
            showarrow=True,
            arrowhead=7,
            ax=0,
            ay=-40
))

fig.update_layout(showlegend=False)

fig.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...