Я генерирую точечные диаграммы с помощью 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)
Вы передаете список строк в качестве диапазона. Это создает категориальную ось. Тем не менее, список категорий для диапазона, как ожидается, будет уникальным, без дубликатов. Вы передаете список с повторяющимися значениями. Это на самом деле недопустимое использование, и результатом является неопределенное поведение. Для диапазона вы должны передать уникальный список категориальных факторов в том порядке, в котором вы хотите, чтобы они появлялись.
xrng = list(set(days))
и передал его как диапазон x:p = figure(x_range=xrng)
Спасибо !!