首页 > 解决方案 > Python散景随机颜色生成器

问题描述

这是我在此的头一篇博文。我正在编写 Python 代码来模拟 1000 个粒子在 200 天内的随机运动并绘制到散景图上,我想为每个粒子生成一个随机颜色代码。但是,似乎该图正在使用最后一个 RGB 颜色代码来绘制点。有没有办法让随机颜色起作用?谢谢

def color_gen():
co=(round(random.random()*250),round(random.random()*250),round(random.random()*250))
return co

TOOLS="pan,wheel_zoom,reset,poly_select,box_select"


p = figure(plot_width=900, plot_height=900, 
                        x_axis_type='auto',y_axis_type='auto',
                          title='Concentration')

i=1 #Particale ID
c=1 #Days
while i<=imax:
    co=color_gen()
    # print(co)
    while c<=cmax:
        cxname="deltax"+str(c)
        xsumname="XSum"+str(c)
        p.circle(data[xsumname], c, legend_label='Partical {}'.format(c), size=2, color=co)
        c=c+1
    i=i+1

p.legend.click_policy="hide"
p.legend.location = "top_left"

p.xaxis.axis_label = 'Z (m)'
p.yaxis.axis_label = 'C0 (kg/cu.m)'



# show the results
show(p)

在此处输入图像描述

标签: pythonbokeh

解决方案


首先,像 Bokeh 字形一样circle旨在以矢量化方式使用,即一次调用circle可用于绘制 1000 个圆圈。实际上,相反,circle在循环中调用 1000 次以单独绘制 1000 个单个圆圈,无论是在 Python 端,还是在浏览器中,都将是非常糟糕的。这根本不是 API 的预期用途。

根据您的描述,您应该具有类似于以下内容的代码:

from bokeh.models import ColumnDataSource

source = ColumnDataSource(data={
    'x'     : [ << 1000 x coordindates    >> ],
    'y'     : [ << 1000 y coordindates    >> ],
    'color' : [ << 1000 random RGB colors >> ],
})

plot = figure(...)
plot.circle('x', 'y', color='color', source=source)

这将使用您放入数据源的 1000 种随机颜色绘制 1000 个圆圈。还有其他可能性,但这是最简单的开始。您可以在用户指南的提供数据章节中阅读有关向 Bokeh 提供数据的更多信息。


推荐阅读