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})
Вы можете установить 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