问题描述
我试图建立一个垂直的散景堆积条形图,在x轴上嵌套类别。
我已经成功完成了绘图工作,但是我想在此轴上为类别使用自定义标签。
我正在使用的代码如下:
from bokeh.io import output_notebook,show
output_notebook()
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource,FactorRange
from bokeh.models.annotations import BoxAnnotation
from bokeh.models.widgets import DaterangeSlider,Select
from bokeh.layouts import row,column
def bkapp(doc):
# define controls
# select: choose indicator from list
select = Select(title="Indicateur",options=indicators,value='margin')
# dateslider: filter data on date
dateslider = DaterangeSlider(title='Filtre sur les dates',start=date(2017,7,3),end=date(2020,8,30),value=(date(2020,10),date(2020,30)),step=604800000)
controls = [select,dateslider]
# compute data source
def compute_indicator(df,indicator):
return(
df.groupby(['origin2','seg2','seg3','orgacom'],observed=True,)[indicator]
.sum()
.unstack('origin2',fill_value=0.)
)
def select_data():
date_range = dateslider.value
selected = orders.reset_index().loc[
(orders.reset_index().seg1 == 'Z3') &
(orders.reset_index().date >= pd.to_datetime(date.fromtimestamp(date_range[0] / 1000))) &
(orders.reset_index().date <= pd.to_datetime(date.fromtimestamp(date_range[1] / 1000)))
]
return(selected)
def update():
indicator = select.value
df = select_data()
grouped = compute_indicator(df,indicator)
source.data = ColumnDataSource.from_df(grouped)
for control in controls:
control.on_change('value',lambda attr,old,new: update())
df = compute_indicator(select_data(),select.value)
source = ColumnDataSource(data=df)
p = figure(x_range=FactorRange(*list(df.index)))
p.vbar_stack(df.columns,x='seg2_seg3_orgacom',source=source,width=.9,color=['red','green','blue','black'],legend_label=list(df.columns),)
p.xaxis.major_label_orientation = 1
p.yaxis.formatter = NumeralTickFormatter(format="0")
doc.add_root(column(select,dateslider,p))
show(bkapp,notebook_url="http://devdm:8888")
此代码创建了一个功能齐全的交互式图表(请参见下文),但我想重命名x轴上使用的类别。
是否有任何方法可以重命名类别(例如,“ Z4”,“ ZI”,“ 2BRE”,...),例如使用类似于{'Z4':'Restauration commerciale','ZI'的字典: “独立”,...}?还是建议直接在我的pandas DataFrame中计算它们(我宁愿避免)?
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)