сюжет express: как контролировать стартовую позицию баров? - PullRequest
1 голос
/ 10 февраля 2020

У меня есть простые данные акций, как это:

Company	Performance	label
0	TEVA	-25.46	neg
1	AAL	-17.30	neg
2	OXY	-11.56	neg
3	LBTYK	-10.33	neg
4	KHC	-10.00	neg
5	AAPL	13.16	pos
6	PG	13.43	pos
7	UPS	16.03	pos
8	STNE	17.58	pos
9	RH	47.78	pos

, и я хотел бы создать гистограмму с толстой линией в нуле (скажем, 10px) и барами, которые начинаются с y = +5 (при положительном значении) и y = -5 (когда отрицательно). Можно ли управлять начальными позициями баров на графике express?

Вот код:

fig = px.bar(df_win_los, x='Company', y='Performance', color='label',barmode='relative', color_discrete_map={'neg':'orangered', 'pos':'limegreen'}, 
         title=dict(text='BH Q419 top winners and losers', x=0.5, xanchor='center'),
         text='Performance', template='none+xgridoff+ygridoff+plotly_dark')

fig.update_layout(font=dict(size=22 ), showlegend=False, yaxis_title='Performance (%)', xaxis_title='Symbols')
fig.update_yaxes(zeroline=True, zerolinewidth=10, zerolinecolor='rgb(90,90,90)', nticks=5)

В результате получается гистограмма, где бары начинаются с нуля (не с + 5, -5 соответственно), как показано здесь: введите описание изображения здесь

Спасибо за любую идею

1 Ответ

0 голосов
/ 10 февраля 2020

Для достижения этого необходимо установить параметр base, который доступен в go.Bar, но не в px.bar.

import pandas as pd
import plotly.graph_objs as go

df_neg = df[df["label"]=="neg"]
df_pos =  df[df["label"]=="pos"]
fig = go.Figure()
fig.add_trace(
    go.Bar(x=df_neg.index,
           y=df_neg["Performance"],
           marker_color="orangered",
           showlegend=False,
           base=-1.7))
fig.add_trace(
    go.Bar(x=df_pos.index,
           y=df_pos["Performance"],
           marker_color="limegreen",
           showlegend=False,
           base=+1.7))
fig.update_yaxes(zeroline=True,
                 zerolinewidth=10,
                 zerolinecolor='rgb(90,90,90)', nticks=5)
fig.update_xaxes(ticktext=df["Company"],
                 tickvals=df.index)
fig.update_layout(font=dict(size=22 ),
                  yaxis_title='Performance (%)',
                  xaxis_title='Symbols',
                  template='none+xgridoff+ygridoff+plotly_dark'
                 )
fig.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...