Plotly - Настраиваемый столбиковый график

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

def get_leads_data(request):
    c = Profile.objects.get(user=request.user)

    qs = Leads.objects.filter(
            agent_id=c,status='Open')

    df = read_frame(qs)

    graphs = []
    graphs.append(go.Bar(
            x=df['company'],
            y=df['expected_revenue'],
            name='Estimated Revenue'
    ))
    layout={
        'title': 'Estimated Revenue by Company',
        'xaxis_title':'Company',
        'yaxis_title':'Revenue',
        'height':500,
        'width':640,
    }
    plot_div = plot({'data': graphs, 'layout': layout},
                    output_type='div')
    return render(request,'account/plot.html',{'plot_div':plot_div})


Ugly bar graph

Вы можете установить width свойство go.Bar

Свойство width

Устанавливает ширину (в px) поперечной полосы на обоих концах полос ошибок.

Свойство 'width' является числом и может быть задано как: int или float в интервале [0, inf]

.

Пример использования

import plotly.graph_objects as go

fig = go.Figure(go.Bar(x=[1], y=[200], width=0.2))
fig.show()

Поскольку вы указали, что вам не нравится ширина, когда есть только один бар, вы могли бы условно передать значение в свойство width. Таким образом, если количество рядов ваших данных равно единице, вы можете изменить ширину на меньшую, в противном случае вы ничего не передаете и оставляете это на усмотрение plotly.

Ответ на вопрос:

def plot_deals_data(qs): df = read_frame(qs)

graphs = []
 
graphs.append(go.Bar(
    x=df['company'],
    y=df['revenue'],
    name='Estimated Revenue',
    marker=dict(color='#008375'),
    width=0.2,

))
layout = {
    'title': 'Revenue by Company',
    'title_xanchor':'center',
    'title_yanchor':'top',
    'title_y':0.9,
    'title_x':0.5,
    'xaxis_title': 'Company',
    'yaxis_title': 'Actual Revenue',
    'height': 600,
    'width': 740,
    'font_family':'Muli',
    'font_color':'#008375',
    'font_size': 16
}


plot_div = plot({'data': graphs, 'layout': layout},
                output_type='div',include_plotlyjs=False,
                show_link=False,link_text="")

return plot_div
Вернуться на верх