Holoviews QuadMesh 边缘不透明度
Holoviews QuadMesh edge opacity
问题描述:
当使用 HoloViews 中的 QuadMesh
图时,即使使用 line_alpha=0, line_width=0
.
等选项,也可以观察到所有四边形图块之间的白线
这些明显的线条实际上是四边形之间的间隙,因为如果替换 `bgcolor='black') 线条将显示为黑色。
通过 linea_alpha=1, line_width=1, line_color='m'
启用线条将用洋红色线条绘制空白。
问题
是否可以消除这些线条?如果可以,我应该怎么做?
这在曲线平铺的情况下可能不是什么大问题,但我的实际数据导致轴平行平铺和令人难以置信的丑陋的锯齿伪像(我不能使用 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')
您无法删除它们。
holoviews QuadMesh 构建不规则网格 bokeh Patches glyphs
从 bokeh 2.4.2 开始,它以某种方式在相邻补丁之间有 built-in 间隙,如该小示例代码所示:
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)
因此,如果您使用带有散景的全息 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)
与使用 matplotlib 的 pcolormesh 生成的类似地图进行比较,看看颜色应该更加鲜艳:
import matplotlib.pyplot as plt
mpl_fig,ax = plt.subplots()
zz = np.random.rand(ny,nx)
ax.pcolormesh(zz)
plt.show(mpl_fig)
我在散景 github 上开了一个问题:https://github.com/bokeh/bokeh/issues/12085
问题描述:
当使用 HoloViews 中的 QuadMesh
图时,即使使用 line_alpha=0, line_width=0
.
这些明显的线条实际上是四边形之间的间隙,因为如果替换 `bgcolor='black') 线条将显示为黑色。
通过 linea_alpha=1, line_width=1, line_color='m'
启用线条将用洋红色线条绘制空白。
问题
是否可以消除这些线条?如果可以,我应该怎么做?
这在曲线平铺的情况下可能不是什么大问题,但我的实际数据导致轴平行平铺和令人难以置信的丑陋的锯齿伪像(我不能使用 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')
您无法删除它们。
holoviews QuadMesh 构建不规则网格 bokeh Patches glyphs
从 bokeh 2.4.2 开始,它以某种方式在相邻补丁之间有 built-in 间隙,如该小示例代码所示:
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)
因此,如果您使用带有散景的全息 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)
与使用 matplotlib 的 pcolormesh 生成的类似地图进行比较,看看颜色应该更加鲜艳:
import matplotlib.pyplot as plt
mpl_fig,ax = plt.subplots()
zz = np.random.rand(ny,nx)
ax.pcolormesh(zz)
plt.show(mpl_fig)
我在散景 github 上开了一个问题:https://github.com/bokeh/bokeh/issues/12085