Bokeh VBar Dodge на основе петли - PullRequest
0 голосов
/ 08 апреля 2020

Vbar Dodge используется для создания нескольких VBAR .. Мне удалось сделать это с таким кодом из документации ..

from bokeh.io import output_file, show
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
from bokeh.transform import dodge

output_file("dodged_bars.html")

fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ['2015', '2016', '2017']

data = {'fruits' : fruits,
        '2015'   : [2, 1, 4, 3, 2, 4],
        '2016'   : [5, 3, 3, 2, 4, 6],
        '2017'   : [3, 2, 4, 4, 5, 3]}

source = ColumnDataSource(data=data)

p = figure(x_range=fruits, y_range=(0, 10), plot_height=250, title="Fruit Counts by Year",
           toolbar_location=None, tools="")

p.vbar(x=dodge('fruits', -0.25, range=p.x_range), top='2015', width=0.2, source=source,
       color="#c9d9d3", legend_label="2015")

p.vbar(x=dodge('fruits',  0.0,  range=p.x_range), top='2016', width=0.2, source=source,
       color="#718dbf", legend_label="2016")

p.vbar(x=dodge('fruits',  0.25, range=p.x_range), top='2017', width=0.2, source=source,
       color="#e84d60", legend_label="2017")

p.x_range.range_padding = 0.1
p.xgrid.grid_line_color = None
p.legend.location = "top_left"
p.legend.orientation = "horizontal"

show(p)

Из этого я понимаю, что VBAR строится для каждого значения фруктов с годами (2015, 2016, 2017) Проблема в том, что я хочу автоматизировать это в своем проекте, так как некоторые продукты могут иметь 3 года, а некоторые - 4. Поэтому я попытался:

years = dfYI['year_quarter'].unique()
year_q = sorted(years)
index_cmap = factor_cmap('area', palette=Spectral5, factors=year_q, end=1)

print(year_q)

pTop = figure(plot_width=800, height=500, x_range=area, x_axis_label='Area by Yr/Quarter', 
              y_axis_label='Count of MMS Tracer ID', title='YI by Area', tooltips=[("MMS Count", "@$name")])

    for year in year_q:
        pTop.vbar(x=dodge('area', -0.3, range=pTop.x_range), top=year, width=0.2, source=groupTop,
            fill_color=index_cmap, legend=str(year)+ 'label', name=year)

У меня все годы складываются в только один vbar

1 Ответ

0 голосов
/ 08 апреля 2020

В первом примере вы указываете разные значения value - dodge для каждого года.

Во втором примере вы указываете одинаковые value для всех лет.

...