Holoviews/Datashader中针对分类数据更改颜色映射

5
我正在尝试使用Datashader和Holoviews可视化分类空间数据,类似于https://anaconda.org/jbednar/census-hv-dask/notebook。然而,当我尝试为不同的类别分配不同的颜色时,我总是得到相同的(可能是默认的)颜色(输出图像的示例)。这是我在Jupyter笔记本中运行的代码。有人能指导我如何使自定义颜色映射工作吗?或者至少运行代码以查看是否与图例匹配的颜色。谢谢!
from sklearn.datasets.samples_generator import make_blobs
from matplotlib import pyplot
import pandas as pd

import holoviews as hv
import geoviews as gv
import datashader as ds
from cartopy import crs
from matplotlib.cm import get_cmap
from holoviews.operation.datashader import datashade, aggregate
hv.notebook_extension('bokeh', width=95)

# Generating blob data:
X, y = make_blobs(n_samples=5000000, centers=5, n_features=2)
df = pd.DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

# Plotting the blobs using datashader and holoviews:
%opts Overlay [width=800 height=455 xaxis=None yaxis=None show_grid=False] 
%opts Shape (fill_color=None line_width=1.5) [apply_ranges=False] 
%opts Points [apply_ranges=False] WMTS (alpha=0.5) NdOverlay [tools=['tap']]

color_key = {0:'red', 1:'blue', 2:'green', 3:'yellow', 4:'black'}
labels    = {0:'red', 1:'blue', 2:'green', 3:'yellow', 4:'black'}

color_points = hv.NdOverlay({labels[k]: gv.Points([0,0], crs=crs.PlateCarree(),
                            label=labels[k])(style=dict(color=v))
                            for k, v in color_key.items()})

dataset = gv.Dataset(df, kdims=['x', 'y'], vdims=['label'])
shaded = datashade(hv.Points(dataset), cmap=color_key, aggregator=ds.count_cat('label'))

shaded * color_points
1个回答

0

那段代码看起来好像不能运行 (races未定义,gv未导入),但无论如何,分类颜色是由color_key参数确定的,而不是cmap,因此您需要将cmap=color_key更改为color_key=color_key


谢谢James,你解决了我的问题,我还编辑了代码以使其可运行。我只有一个问题:在你的示例笔记本(链接在我原来的问题中)中,你还使用了cmap参数而不是color_key参数(在定义“shaded”时),但颜色是正确的。这与我的情况有何不同? - Runkles
啊,这才是真正的问题所在!那个链接指向的是一个旧版本的笔记本,它一直存在于我们还没有办法在实际网站上展示笔记本的时候。以前只有一种设置颜色映射的方法,但我们将颜色键和cmap选项分开了,因为分类图与默认的cmap颜色映射不兼容,但那个笔记本的副本还没有更新。此外,我们即将将示例移动到pyviz.org,以便我们能够真正地维护它们。对于造成的混乱,我很抱歉,我想我至少应该上传一个更新的nb。 - James A. Bednar
好的,我从现在开始将在实际网站中使用笔记本作为参考。再次感谢! - Runkles
原来census_hv_dask是datashader.org上现有的“选区划分”笔记本的一个非常旧的副本,所以我已经将其删除以避免混淆。 - James A. Bednar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接