pandas 散景因子_cmap不适用于散射,但适用于vbar

hlswsv35  于 2023-03-16  发布在  其他
关注(0)|答案(1)|浏览(106)

我正在尝试应用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的绘图行为不同。
我所期待的:散点图标记的颜色与垂直条形图类似。
事情经过:尽管垂直条正确遵循颜色图,但所有标记的颜色相同。

qxgroojn

qxgroojn1#

点”标记是唯一的,不响应fill_color。这是因为它通常是对某些其他字形(例如circle_dottriangle_dot)的添加,在这些情况下,“点”颜色必须与line_color匹配,而不是与fill_color匹配(否则它将是不可见的)。为了在任何地方都保持一致,plain dot也只使用line_color,即使它是独立的:

p.scatter('my_fruits', 'my_counts', source=source, size=50, 
          line_color=factor_cmap('my_fruits', palette="Spectral6", factors=my_fruits), 
          marker="dot", legend_field ='my_fruits')

或者,您可以使用“circle”标记,它像典型标记一样使用fill_colorline_color
还要注意的是,plot_height已被弃用,在Bokeh 3.0及更高版本中只需使用height

相关问题