Пометить определенные пузырьки на диаграмме пузырьков Plotly - PullRequest
0 голосов
/ 10 мая 2018

У меня проблемы с выяснением, как маркировать определенные пузырьки на графике plot.ly.Я хочу, чтобы в определенных «всплывающих» пузырьках был текст, написанный внутри пузырька, а не с помощью наведения текста.

Допустим, у меня есть эти данные:

import plotly.plotly as py
import plotly.graph_objs as go

trace0 = go.Scatter(
    x=[1, 2, 3, 4],
    y=[10, 11, 12, 13],
    mode='markers',
    marker=dict(
        size=[40, 60, 80, 100],
    )
)

data = [trace0]
py.iplot(data, filename='bubblechart-size')

Я бы хотел добавить текстовые маркеры на пузырьки, которые соответствуют (1,10) и (4,13).Кроме того, возможно ли контролировать расположение текстовых маркеров?

1 Ответ

0 голосов
/ 10 мая 2018

Вы можете достичь этого с помощью аннотаций .

Это позволяет вам написать любой текст на диаграмме и связать его с вашими данными. Вы также можете контролировать, где будет отображаться текст, используя привязки позиции или применяя дополнительный расчет к данным x и y. Например:

x_data = [1, 2, 3, 4]
y_data = [10, 11, 12, 13]
z_data = [40, 60, 80, 100]

annotations = [
    dict(
        x=x, 
        y=y,
        text='' if 4 > x > 1 else z, # Some conditional to define outliers
        showarrow=False,
        xanchor='center',  # Position of text relative to x axis (left/right/center)
        yanchor='middle',  # Position of text relative to y axis (top/bottom/middle)
    ) for x, y, z in zip(x_data, y_data, z_data)
]

trace0 = go.Scatter(
    x=x_data,
    y=y_data,
    mode='markers',
    marker=dict(
        size=z_data,
    )
)

data = [trace0]
layout = go.Layout(annotations=annotations)

py.iplot(go.Figure(data=data, layout=layout), filename='bubblechart-size')

Редактировать

При использовании запонок вышеприведенное можно слегка адаптировать к:

bubbles_to_annotate = df[(df['avg_pos'] < 2) | (df['avg_pos'] > 3)]  # Some conditional to define outliers
annotations = [
    dict(
        x=row['avg_pos'], 
        y=row['avg_neg'],
        text=row['subreddit'],
        showarrow=False,
        xanchor='center',  # Position of text relative to x axis (left/right/center)
        yanchor='middle',  # Position of text relative to y axis (top/bottom/middle)
    ) for _, row in bubbles_to_annotate.iterrows()
]

df.iplot(kind='bubble', x='avg_pos', y='avg_neg', size='counts', 
       text='subreddit', xTitle='Average Negative Sentiment', 
       yTitle='Average Positive Sentiment', annotations=annotations,
       filename='simple-bubble-chart')

Вам все еще нужно будет определить аннотации, поскольку вам нужен условный аргумент. Затем передайте это непосредственно запонкам через annotations.

...