我正在尝试应用factor_cmap将简单的数据点Map到散点图。我从一个简单的example开始,尝试修改它并覆盖一个散点图,以测试相同的数据和颜色Map是否有效:
import pandas as pd
from bokeh.plotting import figure, output_notebook, show
from bokeh.models import ColumnDataSource, Plot, Scatter
from bokeh.transform import factor_cmap
from bokeh import palettes
my_fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
my_counts = [5, 3, 4, 2, 4, 6]
source = ColumnDataSource(data=dict(my_fruits=my_fruits, my_counts=my_counts))
p = figure(x_range=my_fruits, plot_height=250, toolbar_location=None, title="Fruit Counts")
p.vbar(x='my_fruits', top='my_counts', width=0.9, source=source,
line_color='white', fill_color=factor_cmap('my_fruits', palette="Spectral6", factors=my_fruits))
p.scatter('my_fruits', 'my_counts', source=source, size=50, fill_color=factor_cmap('my_fruits', palette="Spectral6", factors=my_fruits), marker="dot", legend_field ='my_fruits')
p.xgrid.grid_line_color = None
p.y_range.start = 0
p.y_range.end = 9
p.legend.orientation = "horizontal"
p.legend.location = "top_center"
show(p)
我得到的结果如下所示:Result of notebook code颜色Map适用于条形图,但不适用于覆盖在条形图上的散点图。
我尝试了:我回顾了this question,这个问题与他们的数据有关,所以我不知道解决方案是什么。我看到示例数据可以与scatter和factor_cmap一起工作,但我就是不明白为什么我的示例不能工作。看起来数据的结构有些不同,但我不明白为什么scatter和vbar的绘图行为不同。
我所期待的:散点图标记的颜色与垂直条形图类似。
事情经过:尽管垂直条正确遵循颜色图,但所有标记的颜色相同。
1条答案
按热度按时间qxgroojn1#
点”标记是唯一的,不响应
fill_color
。这是因为它通常是对某些其他字形(例如circle_dot
、triangle_dot
)的添加,在这些情况下,“点”颜色必须与line_color
匹配,而不是与fill_color
匹配(否则它将是不可见的)。为了在任何地方都保持一致,plaindot
也只使用line_color
,即使它是独立的:或者,您可以使用“circle”标记,它像典型标记一样使用
fill_color
和line_color
。还要注意的是,
plot_height
已被弃用,在Bokeh 3.0及更高版本中只需使用height
。