Фиксирование расстояния между осями (галочки) на точечных диаграммах Боке

1

Я генерирую точечные диаграммы с помощью Bokeh с разными значениями Y для каждого значения X. Когда Bokeh генерирует график, он автоматически дополняет интервал по оси x в зависимости от количества нанесенных значений. Я хотел бы, чтобы все значения на оси X были расположены равномерно, независимо от количества отдельных точек данных. Я смотрел на ручную настройку тиков, но похоже, что я сам должен установить интервал, используя этот подход (то есть указать точные позиции). Я хотел бы, чтобы он автоматически устанавливал интервал равномерно, как это происходит при построении единичных пар значений x, y. Можно ли это сделать?

Вот пример, показывающий поведение.

import pandas
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource

days =['Mon','Mon','Mon', 'Tues', 'Tues', 'Weds','Weds','Weds','Weds']
vals = [1,3,5,2,3,6,3,2,4]

df = pandas.DataFrame({'Day': days, 'Values':vals})

source = ColumnDataSource(df)

p = figure(x_range=df['Day'].tolist())
p.circle(x='Day', y='Values', source=source)
show(p)
Теги:
bokeh
scatter-plot

1 ответ

1
Лучший ответ

Вы передаете список строк в качестве диапазона. Это создает категориальную ось. Тем не менее, список категорий для диапазона, как ожидается, будет уникальным, без дубликатов. Вы передаете список с повторяющимися значениями. Это на самом деле недопустимое использование, и результатом является неопределенное поведение. Для диапазона вы должны передать уникальный список категориальных факторов в том порядке, в котором вы хотите, чтобы они появлялись.

  • 0
    Это единственный способ передать несколько значений x для каждого значения y. Есть ли другой способ сделать это? Я попытался использовать цикл для генерации отдельных глифов и их добавления, но это приводит к другим проблемам с категориями. Что же тогда является правильным способом создания точечной диаграммы с несколькими значениями y для каждого значения x в боке ???
  • 0
    Бинго! Я только что попробовал это: xrng = list(set(days)) и передал его как диапазон x: p = figure(x_range=xrng) Спасибо !!
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню