Непрозрачность края Holoviews QuadMesh

Описание проблемы:

При использовании графика QuadMesh в HoloViews можно наблюдать белые линии между всеми четырехугольными плитками, даже при использовании таких параметров, как line_alpha=0, line_width=0.

Непрозрачность края Holoviews QuadMesh

Эти кажущиеся линии на самом деле являются промежутками между квадратами, так как если заменить `bgcolor='black'), линии будут казаться черными.

Включение линий с помощью linea_alpha=1, line_width=1, line_color='m' закрасит пробелы пурпурными линиями.

Непрозрачность края Holoviews QuadMesh

Вопрос

Можно ли удалить эти строки, и если да, то как мне это сделать?

Это может не быть большой проблемой в случае криволинейной мозаики, но мои фактические данные приводят к осепараллельной мозаике и невероятно уродливым артефактам сглаживания (я не могу использовать Image, поскольку данные не равноудалены).

Минимальный рабочий пример

Это будут примеры по умолчанию из галереи HoloViews, упомянутой выше:

import numpy as np
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')

n = 20
coords = np.linspace(-1.5, 1.5, n)
X,Y = np.meshgrid(coords, coords);
Qx = np.cos(Y) - np.cos(X)
Qz = np.sin(Y) + np.sin(X)
Z = np.sqrt(X**2 + Y**2)

qmesh = hv.QuadMesh((Qx, Qz, Z))

#plot default
qmesh

#plot with black background and magenta lines
qmesh.opts(line_alpha=1, line_width=1, line_color='m', bgcolor='black')

Вышеприведенное было создано с помощью 1.14.6 в блокноте Jupyter, а также в консоли IPython с использованием Python 3. Мне удалось воспроизвести проблему на двух разных машинах с использованием Python 3.6.15 и 3.6.5, а также Bokeh 2.3.1 и 2.3. .3.

Nox 06.04.2022 20:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете удалить их.

holoviews QuadMesh строит нерегулярные сетки с боке Патчи глифы

Начиная с боке 2.4.2, оно каким-то образом имеет встроенные промежутки между соседними патчами, что можно увидеть в этом небольшом примере кода:

import numpy as np

from bokeh.models import ColumnDataSource, Patches
from bokeh.plotting import figure
from bokeh.io import show

xpts = np.array([0, 0, 1, 1])
ypts = np.array([0, 1, 1, 0])

source = ColumnDataSource(dict(
        xs=np.array([(xpts+j) for i in range(5) for j in range(5)]),
        ys=np.array([ypts+i for i in range(5) for j in range(5)]),
    )
)

fig = figure(
    title=None, width=300, height=300,
    min_border=0,background_fill_color = "red")

glyph = Patches(xs = "xs", ys = "ys", fill_color = "white",line_width=0)
fig.add_glyph(source, glyph)
fig.ygrid.visible = False
fig.xgrid.visible = False
show(fig)

Поэтому, если вы используете holoview QuadMesh с боке для построения, например. данных высокого разрешения с большим количеством патчей, ваши уменьшенные цвета карты будут выглядеть размытыми из-за всех этих пробелов между патчами, которые пропускают цвет фона:

import numpy as np
from bokeh.models import ColumnDataSource, Patches
from bokeh.plotting import figure
from bokeh.io import show
from bokeh.palettes import viridis
import random

xpts = np.array([0, 0, 1, 1])
ypts = np.array([0, 1, 1, 0])

nx = 1000
ny = 500
colors = viridis(24)
source = ColumnDataSource(data=dict(
xs=np.array([(xpts+j) for i in range(ny) for j in range(nx)]),
ys=np.array([ypts+i for i in range(ny) for j in range(nx)]),
colors=np.array([random.choice(colors) for i in range(nx*ny)])
))

fig = figure(
    title=None, width=300, height=300,
    min_border=0)


glyph = Patches(xs = "xs", ys='ys', fill_color='colors',line_width=0)
fig.add_glyph(source,glyph)
fig.ygrid.visible = False
fig.xgrid.visible = False
show(fig)

Сравните с аналогичной картой, созданной с помощью pcolormesh от matplotlib, чтобы увидеть, насколько ярче должны быть цвета:

import matplotlib.pyplot as plt
mpl_fig,ax = plt.subplots()
zz = np.random.rand(ny,nx)
ax.pcolormesh(zz)
plt.show(mpl_fig)

Я открыл тему на гитхабе боке: https://github.com/bokeh/bokeh/issues/12085

Спасибо за объяснение и проблему! Я тоже заподозрил проблему с боке, попробовав ее с бэкэндом Matplotlib, но, учитывая предварительное обсуждение в комментариях (теперь ушло), не был уверен, может ли проблема быть связана с тем, как обрабатывается BokehJS.

Nox 09.04.2022 21:03

Другие вопросы по теме