修复Bokeh散点图中的坐标轴(刻度)间距问题
解决Bokeh分类X轴均匀间距的问题
这个问题的核心是你给x_range传入了包含重复值的列表,Bokeh会把列表里的每一项都当作独立的分类刻度,所以才会出现X轴间距被重复值挤占的情况。要实现均匀间距,只需要给x_range传入去重后的唯一分类值列表,同时保持它们的出现顺序就可以了,完全不用手动指定刻度位置。
修改后的示例代码
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) # 关键修改:传入去重且保持顺序的唯一分类值 unique_days = list(dict.fromkeys(df['Day'])) # 也可以用df['Day'].unique().tolist()(pandas 1.0+版本会保持原始顺序) p = figure(x_range=unique_days) p.circle(x='Day', y='Values', source=source) show(p)
原理说明
- 当你传入
x_range=df['Day'].tolist()时,列表里包含3个Mon、2个Tues、4个Weds,Bokeh会生成9个刻度位置,重复的分类会被并排显示,自然导致间距不均匀。 - 传入去重后的唯一分类列表后,Bokeh会为每个唯一分类分配一个均匀的位置,不管每个分类对应多少个Y值,所有X轴刻度都会保持相等的间距,和你绘制单个X-Y值对时的效果完全一致。
内容的提问来源于stack exchange,提问作者JeremyD
相关产品推荐
相关产品推荐

