Как заставить цвета на графике боке соответствовать их правильным значениям (масштаб журнала)? - PullRequest
0 голосов
/ 05 января 2020

Моя проблема похожа на это обсуждение - https://github.com/bokeh/bokeh/issues/5020

Я пытаюсь выделить точки на боке с помощью схемы раскраски в логарифмическом масштабе, и у меня есть цветовая полоса, которая идет вдоль с этим. Мои «значения цвета» (то есть то, что я собираюсь варьировать от 1e-9 до 1e-3).

Моя проблема сейчас заключается в том, что я могу заставить цветовую панель соответствовать этому определенному цветовому диапазону соответствующим образом, используя LogColorMapper и LogTicker, но использование одного и того же LogColorMapper для свойства fill_color на моих точках, кажется, отображается неправильно. См. Свернутый пример ниже:

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

Использование hovertool для наведения на точки (извините, я не знаю как встраивать / связывать графики боке) ... вы увидите, что цвета на графике не соответствуют значениям точек. Что мне здесь не хватает?

Ответы [ 3 ]

0 голосов
/ 06 января 2020

Это была проблема в Bokeh 1.4, но она уже решена на master и будет в следующей версии 2.0. Исходный код работает, как и ожидалось, в сборках «dev» 2.0.

0 голосов
/ 06 января 2020

Вот ответ

Я нашел проблему и решил обходной путь. Смотрите эту ветку:

По сути, это связано с тем, что преобразование журнала между logcolorbar отличается от преобразования журнала для fill_color, и это вызывает проблемы для значений от 0 до 1 (мой домен). Смотрите мой пост здесь: github.com/bokeh/bokeh/pull/8832

Очевидно, это будет решено в следующем выпуске, но пока что мой обходной путь подойдет.

0 голосов
/ 06 января 2020

user11705556 указывает, что эта проблема решается путем преобразования журнала между logcolorbar, отличным от преобразования журнала для fill_color, cf PR .

(я удалю этот ответ после Пользователь11705556 отправляет ответ на свой вопрос.)

...