Я хочу нарисовать сетку с кругами и пометить каждую строку и столбец. Хотя я могу нарисовать точки данных, я не могу правильно выровнять точки данных и их соответствующие метки, поэтому график выглядит следующим образом:
Как это сделать правильно, чтобы метки галочек совпадали с точками данных?
Код:
import numpy as np
import itertools
from bokeh.models import Circle, ColumnDataSource
from bokeh.plotting import figure, show
space = 0.5
row_ind = np.arange(0, 2, space)
col_ind = np.arange(0, 1.5, space)
data_points = list(itertools.product(row_ind, col_ind))
rows = [dp[0] for dp in data_points]
cols = [dp[1] for dp in data_points]
size = 10
sizes = [size] * len(data_points)
source = ColumnDataSource(dict(columns=cols, rows=rows, size=sizes))
plot = figure(
plot_width=400,
plot_height=300,
x_range=["1", "2", "3"],
y_range=list("ABCD")
)
plot.circle(
x="columns",
y="rows",
size="size",
line_color="black",
fill_color="white",
line_width=2,
source=source
)
show(plot)
row_ind
иcol_ind
нужно поменять местами в вашем коде). Когда я затем использую этотmajor_label_overrides
, я получаю смесь цифр и букв. Я использую:plot.xaxis.ticker = col_ind
,plot.yaxis.ticker = row_ind
, а затемplot.yaxis.major_label_overrides = {i:s for i,s in zip(row_ind, list('ABCD'))}
, но тогда0
,B
,1
иD
в качестве галочек,A
иC
игнорируются. Не могли бы вы опубликовать свой полный код и версию боке, которую вы используете? Я уже проголосовал, так как это дает мне возможность поиграть; Я принимаю, когда это работает... 28.12.2020row_ind = [ int(item) if float(item).is_integer() else item for item in row_ind ]
(то же самое дляcol_ind
), что затем решает проблему. У вас есть более простое решение? 28.12.2020