Боке гистограмма - PullRequest
       7

Боке гистограмма

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

Я хочу сделать гистограмму с накоплением в jupyter, используя pandas и боке. У меня есть 3 столбца: ['Feedstuff', 'Month', 'Price']. Я хочу, чтобы цена на оси х, название каждого корма на оси у, и столбцы, сложенные по месяцам. Мои данные выглядят так:

data=[
['feed_wheat','Jan',138.24],
['feed_wheat','Dec',141.84],
['wheat_feed','Jan',106.45], ], 
columns=['Feedstuff','Month','Price']

Мой код построения

output_notebook()

source = ColumnDataSource(T_M_11)
fs=source.data['Feedstuff'].tolist()
mt=source.data['Month'].tolist()
pr=source.data['Price'].tolist()
colors = ["#A5D6F3", "#B7D8EB", "#72A2D0","#252825","#505D66","#71A5D8","#2A5581","#202E26","#3D545F",
         "#20364C","#6E9CD5","#3F64B4"]
data = {
    'Feedstuff' : fs,
     pr : mt
}


p = figure(x_range=fs, plot_height=250, title="Средняя цена за месяцы за 1 единицу корма (Ł/ton), в фунт стерлингов",
           toolbar_location=None,tools="hover", tooltips="$name @fs: @$name")

p.vbar_stack(mt, x='Feedstuff', width=0.9, color=colors,source=data,
             legend_label=mt)

p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xgrid.grid_line_color = None
p.axis.minor_tick_line_color = None
p.outline_line_color = None
p.legend.location = "top_left"
p.legend.orientation = "horizontal"

show(p)

Вот как выглядит ошибка:

> BokehJS 1.4.0 successfully loaded.
>---------------------------------------------------------------------------
>TypeError                                 Traceback (most recent call last)
><ipython-input-361-b751cfb4a157> in <module>
>     9 data = {
>     10     'Feedstuff' : fs,
>---> 11      pr : mt
>     12 }
> 13 
>TypeError: unhashable type: 'list'

К сожалению, мой код построения не работает Работа. Не могли бы вы помочь мне.

1 Ответ

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

Используя ваши данные DataFrame, это сработало для меня ...

data_aux=pd.DataFrame(np.array(np.meshgrid(data['Feedstuff'].unique(), data['Month'].unique())).T.reshape(-1, 2), columns=['Feedstuff', 'Month']).merge(data, on=['Feedstuff',  'Month'], how='left').fillna(0)
data2 = {'Feedstuff' : data_aux['Feedstuff'].unique()}
data2.update(data_aux.groupby(['Month'])['Price'].apply(list).to_dict())

p= figure(y_range=fs, x_range=(0, 1000))

p.hbar_stack(mt, y='Feedstuff', height=0.9, color= ["#A5D6F3", "#B7D8EB"], source=ColumnDataSource(data2))
show(p)

...