我有一个散点图,其中 x 值 < 50 的点为蓝色,x 值 > 50 的点为红色。当我使用框选择工具选择它们时,我试图让颜色反转。所选的蓝色颜色应变为红色,反之亦然。
我尝试通过向 selection_glyph
属性的 fill_color
属性提供颜色数组来实现此目的,但该属性不接受数组。还有其他方法可以实现这一点吗?
import numpy as np
from bokeh.plotting import figure, output_file, show
from bokeh.models import Circle
N = 100
max = 100
x = np.random.random(size=N) * max
y = np.random.random(size=N) * max
output_file("scatter.html")
color1 = []
color2 = []
for a in x:
if a > 50:
color1.append("red")
color2.append("blue")
else:
color1.append("blue")
color2.append("red")
p = figure(tools = "box_select, tap", width = 400, height = 400,
x_range = (0,100), y_range = (0,100))
circles = p.circle(x, y, size=10, fill_color = color1, line_color = None)
#circles.selection_glyph = Circle(fill_color = color2, line_color = None)
#circles.nonselection_glyph = Circle(fill_color = color1, line_color = None)
show(p)
最佳答案
是的。将您的数据分成两组,用各自对 p.circle
的调用来绘制每组,为每个调用提供不同的选择/不选择策略:
p = figure(tools = "box_select, tap", width = 400, height = 400,
x_range = (0,100), y_range = (0,100))
circles1 = p.circle(x1, y1, size=10, color="red", line_color=None)
circles1.selection_glyph = Circle(fill_color="blue", line_color=None)
circles1.nonselection_glyph = Circle(fill_color="red", line_color=None)
circles2 = p.circle(x2, y2, size=10, color="blue", line_color=None)
circles2.selection_glyph = Circle(fill_color="blue", line_color=None)
circles2.nonselection_glyph = Circle(fill_color="red", line_color=None)
作为奖励,您不必为每个分散点发送一长串颜色(如果您有很多分散点)。
关于python - 有没有办法在 Bokeh 中为选择字形提供多种颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34362961/