Я пытаюсь классифицировать бары на графике Боке, используя мультииндекс панд, но я не могу заставить его работать - PullRequest
0 голосов
/ 22 мая 2019

Как гласит заголовок, у меня есть многоиндексный фрейм данных в пандах, который я пытаюсь преобразовать в ColumnDataSource в Bokeh.После этого я пытаюсь создать гистограмму с каждым столбцом в определенной категории.

Я попытался использовать групповую диаграмму, которая отображает правильные оси, но затем все столбцы исчезают.

Ниже я показываю рабочий код без мультииндексирования:

wf = pd.read_csv('test.csv')

# Get Parameter Names for Y Axis Labels and group
wf['parameter'] = wf.iloc[:,0].astype(str)
y_axis_labels = wf['parameter']
y_axis_labels = [x for x in y_axis_labels[::-1]]  # labels must be inversed, 

# Get Truncated X Axis Range
x_axis_range_full = list(wf['y_start'])
x_axis_range_without_zero = list(filter(lambda a: a != 0, x_axis_range_full))
x_axis_range_lower = min(x_axis_range_without_zero) - 50
x_axis_range_upper = 1.05 * max(x_axis_range_full)

# Get column data source as variable source
source = ColumnDataSource(wf)
grouped = wf.groupby(by=['group', 'parameter'])

# Create Figure
p = figure(y_range=y_axis_labels,
           x_range=(1000, x_axis_range_upper),
           plot_width=1800, plot_height=1000,
           toolbar_location=None,
           title="PV System Waterfall Chart")

# Add in Horizontal Bars
p.hbar(y='parameter',
       left='y_start',
       right='running_total',
       height=0.85,
       color='color',
       source=source)

Приведенный выше код работает правильно и показывает все столбцы без категоризации.Я приложил другое изображение, которое показывает правильные оси, но со всеми исчезнувшими столбцами.

working example broken example

1 Ответ

0 голосов
/ 22 мая 2019

Я понял, что вы можете сделать это с помощью multiindex и FactorRange. FactorRange был большой недостающий кусок:

# Get multi-index 
group = wf.set_index(['group', 'parameter'])

source = ColumnDataSource(group)
y_range_list = list(group.index)
y_range_list = [x for x in y_range_list[::-1]]

# Create Figure
p = figure(y_range=FactorRange(*y_range_list),
           x_range=(1000, x_axis_range_upper),
           plot_width=1200, plot_height=1200,
           toolbar_location=None,
           title="PV System Waterfall Chart")

# Add in Horizontal Bars
p.hbar(y='group_parameter',
       left='y_start',
       right='running_total',
       height=0.85,
       color='color',
       fill_alpha=0.5,
       source=group)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...