График Bokeh не появляется при попытке использовать 'required_num_ticks' - PullRequest
0 голосов
/ 31 мая 2019

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

Изображение тепловой карты -! (https://imgur.com/a/jn2oquK).

Я оглянулся вокруг, одно решение состояло в том, чтобы использовать функцию Bokeh 'required_num_ticks', но когда я попытался реализовать это (возможно, неправильно), график больше не отображается вообще.

mapper = LinearColorMapper(palette=Magma256, high=df_complete.score.max(), low=df_complete.score.min())

TOOLS = "hover, save, pan, box_zoom, undo, redo, reset, wheel_zoom"

p = figure(title="Heatmap of Sites", x_range=Position, y_range=Values,
           x_axis_location="above", plot_width=900, plot_height=400,
           tools=TOOLS, toolbar_location='below',
           tooltips=[('Position','@Position'),('Score', '@score'), ('Sequence', '@Sequence')])

p.grid.grid_line_color = None
p.axis.axis_line_color = None
p.axis.major_tick_line_color = None
p.axis.major_label_text_font_size = "8pt"
p.axis.major_label_standoff = 0
p.xaxis.major_label_orientation = pi / 3
p.xaxis.ticker = ContinuousTicker(desired_num_ticks = 50) ###

p.rect(x="Position", y="Values", width=1, height=1,
       source=df_complete,
       fill_color={'field':'score', 'transform' : mapper},
       line_color=None)

color_bar = ColorBar(color_mapper=mapper, major_label_text_font_size="8pt",
                     ticker=BasicTicker(),
                     label_standoff=6, border_line_color=None, location=(0, 0))

p.add_layout(color_bar, 'right')
show(p)

Так идеальноЯ бы закончил с сюжетом, где ось X читается в некотором объеме. Спасибо за любую помощь!

1 Ответ

0 голосов
/ 03 июня 2019

Нельзя использовать ContinuousTicker с категориальным диапазоном , поэтому график не отображается, а не desired_num_ticks.По умолчанию категориальные диапазоны приводят к настройке CategoricalTicker, и они всегда показывают тики для каждого категориального фактора, который определяет диапазон.(Вообще говоря, категориальные диапазоны не имеют никакого внутреннего порядка, поэтому не существует «правильного» правила для отображения чего-либо, кроме всех категорий.)

Итак, в вашем случае, что вы могли бы сделать:

  • конвертирует ваши строковые координаты в целые числа
  • Затем вы можете использовать числовые диапазоны и тикеры, например x_range = (0, len(my_factors))
  • Теперь вы можете стилизовать и настраивать тики, используя все средства, доступные для числовых осей: https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#axes
...