Python 如何对齐数据点和标记标签?

Python 如何对齐数据点和标记标签?,python,bokeh,Python,Bokeh,我想画一个带有圆圈的网格,并给每一行和每一列贴上标签。虽然我可以绘制数据点,但我无法正确对齐数据点及其各自的标签,因此绘图如下所示: 如何才能正确完成,使刻度标签与数据点对齐 守则: import numpy as np import itertools from bokeh.models import Circle, ColumnDataSource from bokeh.plotting import figure, show space = 0.5 row_ind = np.arang

我想画一个带有圆圈的网格,并给每一行和每一列贴上标签。虽然我可以绘制数据点,但我无法正确对齐数据点及其各自的标签,因此绘图如下所示:

如何才能正确完成,使刻度标签与数据点对齐

守则:

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)

您应该使用bokeh的dafault范围,然后使用
plot.xaxis.ticker
plot.yaxis.ticker
plot.yaxis.major\u标签覆盖更改刻度

完整示例

import numpy as np
import itertools
from bokeh.models import Circle, ColumnDataSource
from bokeh.plotting import figure, show, output_notebook
output_notebook()
row_ind = np.arange(0, 2, 0.5)
col_ind = np.arange(0, 1.5, 0.5)

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]
sizes = [10] * len(data_points)

source = ColumnDataSource(dict(columns=cols, rows=rows, size=sizes))
plot = figure(
    plot_width=400,
    plot_height=300
)
plot.circle(
    x="columns",
    y="rows",
    size="size",
    line_color="black",
    fill_color="white",
    line_width=2,
    source=source
)
plot.xaxis.ticker, plot.yaxis.ticker = col_ind, row_ind
plot.yaxis.major_label_overrides = dict(zip(
    [int(i) if i.is_integer() else i for i in row_ind], 
    list('ABCD'))
   )
show(plot)
输出


谢谢!然而,我不能重现这个情节<代码>行索引
和列索引需要在代码中切换。然后,当我使用这个
major\u标签\u覆盖
时,我得到了数字和字母的混合。我使用:
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和
被忽略。你能发布你的完整代码和你正在使用的bokeh版本吗?我已经投了更高的票,因为这给了我一些可以玩的东西;一旦成功,我就接受……好了,解决它;似乎是一个错误,这是描述。作为一种解决方法,我现在添加了
row_ind=[int(item)if float(item).is_integer()else item for row_ind中的item]
(与
col_ind
相同),然后解决了这个问题。你有更直接的解决方案吗?我没有意识到这个错误,我使用自定义的dict{0.5:'a',1:'B',1.5:'C',2:'D}创建了这张图片,并希望能够使用其他解决方案。我更新了我的答案,现在显示了完整的代码。我无法避免你提到的解决办法。