Как выровнять текст трассировки по центру на горизонтальной гистограмме с накоплением - PullRequest
0 голосов
/ 19 декабря 2018

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

Я использую Plotly 3.4.1 сJupyter (полностью в автономном режиме).Не удалось найти никакой документации о том, как это сделать, за исключением попыток сделать это с аннотациями, которые выглядят как более подходящее решение, если я хочу точно указать явную координату.То, что я хочу, намного проще (что-то вроде «выровнять»: «центр»), но не смог найти никакого атрибута для этого в go.Bar

Просто хочу, чтобы «80», «20» появлялисьв центре вместо выровненного вправо

from plotly.offline import iplot, plot, init_notebook_mode
import plotly.graph_objs as go

def getStackedSentimentHbar():
    trace0 = go.Bar(
        y=["A","B"],
        x=[20,80],
        orientation = 'h',
        text=["20","80"],
        textposition="inside",
        hoverinfo = "none",
    )
    trace1 = go.Bar(
        y=["A","B"],
        x=[80,20],
        orientation = 'h',
        text=["80","20"],
        textposition="inside",
        hoverinfo = "none",
    )
    data = [trace0,trace1]
    layout = go.Layout(
        barmode='stack',
        showlegend=False,
        xaxis=dict(
            showgrid=False,
            zeroline=False,
            showline=False,
            ticks='',
            showticklabels=False
        ),
        yaxis=dict(
            showgrid=False,
            zeroline=False,
            showline=False,
            ticks='',
            showticklabels=True
        ),
        margin = dict(
            l = 200, 
            r = 50, 
            b = 50, 
            t = 50, 
            pad = 10
        ),
        font=dict(
            family='Heebo', 
            size=18, 
            color='#000000'
        )
    )
    fig = go.Figure(data=data, layout=layout)
    return fig

init_notebook_mode()
fig = getStackedSentimentHbar()
iplot(fig)

1 Ответ

0 голосов
/ 20 декабря 2018

Насколько я знаю, в Plotly такого параметра нет, но мы всегда можем взломать Plotly:)

Давайте просто продублируем все значения x и y, но оставим text как есть.

В приведенном ниже коде есть две функции, getStackedSentimentHbar и getStackedSentimentHbarCentered.Первый возвращает исходный график, второй возвращает график с (почти) центрированными метками.

enter image description here

from plotly.offline import iplot, plot, init_notebook_mode
import plotly.graph_objs as go

LAYOUT = go.Layout(
        barmode='stack',
        showlegend=False,
        xaxis=dict(
            showgrid=False,
            zeroline=False,
            showline=False,
            ticks='',
            showticklabels=False
        ),
        yaxis=dict(
            showgrid=False,
            zeroline=False,
            showline=False,
            ticks='',
            showticklabels=True
        ),
        margin = dict(
            l = 200, 
            r = 50, 
            b = 50, 
            t = 50, 
            pad = 10
        ),
        font=dict(
            family='Heebo', 
            size=18, 
            color='#000000'
        )
    )

def getStackedSentimentHbar(values):

    data = []
    for i, x in enumerate(values['x']):
        trace = go.Bar(
            x=x,
            y=values['y'][i],
            orientation='h',
            text=x,
            textposition='inside',
            hoverinfo = 'none',
        )
        data.append(trace)

    fig = go.Figure(data=data, layout=LAYOUT)
    return fig

def getStackedSentimentHbarCentered(values):

    data = []
    for i, x in enumerate(values['x']):

        trace = go.Bar(
            x=[int(i / 2) for i in x * 2],
            y=values['y'][i] * 2,
            orientation = 'h',
            text=x,
            textposition='inside',
            hoverinfo = 'none'
        )
        data.append(trace)

    fig = go.Figure(data=data, layout=LAYOUT)
    return fig

values = {'x': [[20, 80], [80, 20]],
          'y': [['A', 'B'], ['A', 'B']]}

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