我如何在散景图上获得颜色以使其正确值(对数刻度)对齐?

问题描述 投票:0回答:3

我的问题类似于此讨论-https://github.com/bokeh/bokeh/issues/5020

我正在尝试使用对数刻度着色方案对散景图上的主题点进行着色,并附带一个色条。我的“颜色值”(即我要设定的范围从1e-9到1e-3)。

我现在的问题是,我可以使用LogColorMapper和LogTicker使颜色栏适当地适合定义的颜色范围,但是在我的要点的fill_color属性上使用相同的LogColorMapper似乎映射不正确。请参阅下面的最小化示例:

import numpy as np
from bokeh.io import show
from bokeh.models import ColorBar, LogTicker,Ticker,HoverTool
from bokeh.models.sources import ColumnDataSource
from bokeh.models.mappers import LinearColorMapper, LogColorMapper
from bokeh.palettes import Viridis6, Viridis3,Spectral11
from bokeh.plotting import figure

x = np.linspace(0, 1000, num=1000)
y = [np.random.random()*1000 for x in range(0,1000)]
#generate a random lognormal list, median 1e-6 with standard deviation of 1 order of magnitude
z = 10**np.random.normal(-6, 1, size=1000)

source = ColumnDataSource(dict(x=x, y=y, z=z))

log_mapper = LogColorMapper(palette=Viridis6, low=1e-9, high=1e-3)

custom_hover = HoverTool()
custom_hover.tooltips=[('Value','@z'),]

p = figure(x_axis_type='linear', toolbar_location='above',tools=[custom_hover])
opts = dict(x='x', line_color=None, source=source)
p.circle(y='y', fill_color={'field': 'z', 'transform': log_mapper}, legend="Log mapper", **opts)

colorbar = ColorBar(color_mapper=log_mapper,ticker=LogTicker(), location=(0,0), orientation='horizontal', padding=0)

p.add_layout(colorbar, 'below')

show(p)

当这个计划出现时,我得到这样的东西screencap

使用悬停工具将鼠标悬停在点上(抱歉,我不知道如何嵌入/链接散景图)...您会看到该图上的颜色不适合该点的值。我在这里想念什么?

python python-3.x bokeh
3个回答
0
投票

user11705556指出,通过执行以下操作可以解决此问题:logcolorbar之间的对数变换与fill_color的对数变换不同,cf the PR

((在user11705556发布自己问题的答案后,我将删除此答案。)


0
投票

这是Bokeh 1.4中的问题,但已经在master上解决,并将在即将发布的2.0版本中解决。原始代码按2.0“ dev”构建的预期功能运行。


0
投票

这是答案

我找到了问题,并设法解决。看到这个线程:

基本上与logcolorbar之间的对数变换与fill_color的对数变换有关,这会导致0到1(我的域)之间的值出现问题。在这里查看我的帖子:github.com/bokeh/bokeh/pull/8832

显然,这将在下一发行版中解决,但是与此同时,我的解决方法将完成。

© www.soinside.com 2019 - 2024. All rights reserved.