You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Bokeh散点图中用分类变量定义颜色与标记符号?

用Bokeh一键实现按分类设置散点标记符号

嗨,你说的完全没错!Bokeh确实提供了原生的分类映射功能,不用手动拆分数据集,就能直接给不同color分类设置对应的标记符号,我给你一步步演示具体实现方法:

核心思路

我们可以利用Bokeh的FactorMapper(因子映射器),把color列的分类值('red'、'green'、'blue')直接映射到你想要的标记符号('x'、'o'、'triangle'),然后在scatter绘图时,把marker参数绑定到color列,同时指定这个映射规则就行。

完整代码示例

import pandas as pd
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource
from bokeh.transform import factor_mark

# 1. 准备示例DataFrame(你可以替换成自己的数据集)
data = {
    'x': [1, 2, 3, 4, 5, 6, 7, 8, 9],
    'y': [2, 4, 1, 5, 3, 6, 2, 7, 4],
    'color': ['red', 'green', 'blue', 'red', 'green', 'blue', 'red', 'green', 'blue']
}
df = pd.DataFrame(data)

# 2. 定义分类和对应的标记、颜色映射
color_factors = ['red', 'green', 'blue']
markers = ['x', 'o', 'triangle']
colors = ['red', 'green', 'blue']  # 可选:让标记颜色也对应分类

# 3. 创建数据源
source = ColumnDataSource(df)

# 4. 创建绘图对象
p = figure(title="按分类设置标记的散点图", x_axis_label='x', y_axis_label='y')

# 5. 绘制散点:关键是用factor_mark关联分类和标记
p.scatter(
    x='x',
    y='y',
    source=source,
    # 用factor_mark实现分类到标记的映射
    marker=factor_mark('color', markers, color_factors),
    # 可选:同时设置分类对应的颜色
    color=factor_mark('color', colors, color_factors),
    size=15,  # 调整标记大小
    alpha=0.8  # 调整透明度
)

# 6. 显示图表
show(p)

关键部分解释

  • factor_mark是Bokeh专门用于分类标记映射的工具,它接收三个参数:
    1. 数据源中的分类列名(这里是'color')
    2. 要映射的标记列表(顺序要和分类因子严格对应)
    3. 分类因子的列表(要和数据中的分类值完全匹配)
  • 这样设置后,Bokeh会自动遍历数据源,给每个color分类的点应用对应的标记,完全不用手动拆分数据子集!

如果你还想自定义更多样式(比如不同分类的标记大小、透明度),也可以用类似的逻辑扩展,非常灵活。

内容的提问来源于stack exchange,提问作者maschu

火山引擎 最新活动