我根据以下数据框制作了热图:
Species categories value1 value2
0 sp1 cat1 218.0 2.0
1 sp1 cat2 521.0 2.0
2 sp1 cat3 533.0 2.0
3 sp1 cat4 793.0 3.0
4 sp2 cat1 225.0 2.0
5 sp2 cat2 521.0 2.0
6 sp2 cat3 540.0 2.0
7 sp2 cat4 800.0 3.0
8 sp3 cat1 217.0 1.0
9 sp3 cat2 477.0 1.0
10 sp3 cat3 512.0 3.0
11 sp3 cat4 725.0 3.0
列categories
是x轴列Species
是y轴。热图元素是圆形,颜色范围基于value1
的值,圆形大小基于value2
。
我的观点是关于传说;由于散景教程,我设法为color_bar
绘制value1
比例,但我无法找到如何为value2
制作图例...
我的代码看起来像这样:
# stuff
colors = ["#75968f", "#a5bab7", "#c9d9d3", "#e2e2e2", "#dfccce", "#ddb7b1", "#cc7878", "#933b41", "#550b1d"]
mapper = LinearColorMapper(palette=colors, low=df.value1.min(), high=df.value1.max())
xrange = list(df.columns)
yrange = list(df.index)
# figure
p = figure(title='title',
x_range=xrange, y_range=yrange,
x_axis_location="above", plot_width=400, plot_height=200,
toolbar_location=None, tools=""
)
# draw the circles
p.circle(x="categories", y="Species", size="value2",
source=df,
fill_color={'field': "value1", 'transform': mapper},
line_color=None)
# Legend for circles colors
color_bar = ColorBar(color_mapper=mapper, major_label_text_font_size="10pt",
ticker=BasicTicker(desired_num_ticks=len(colors)),
formatter=PrintfTickFormatter(format="%.3f"),
label_standoff=15, border_line_color=None, location=(0, 0))
p.add_layout(color_bar, 'right')
# missing : legend for circles size !
有没有办法做那种传奇?
答案 0 :(得分:0)
从Bokeh 0.12.14
开始,这仍然是open issue,并且没有一个很好的内置方法来做到这一点。我已经将这个问题重新分类为一个短期里程碑,尽管总是使用OSS,唯一保证帮助任务和功能更快发生的事情是让更多的贡献者投入。
您可以创建自定义扩展程序来绘制专门的图例:
https://bokeh.pydata.org/en/latest/docs/user_guide/extensions.html
这需要更多的迭代和来回讨论,而不是适合SO答案,但请随时来project mailing list。