0

这是我的代码:

import holoviews as hv
import datashader as ds
import dask.dataframe as dd
import geoviews as gv
from cartopy import crs

from holoviews.operation.datashader import datashade

hv.extension('bokeh', width=95)

%opts RGB     [width=1200 height=682 xaxis=None yaxis=None show_grid=False bgcolor='black'] 
%opts Shape (fill_alpha=0 line_width=1.5) [apply_ranges=False tools=['tap']] 
%opts Points [apply_ranges=False ] WMTS (alpha=0.5)


color_key = {worda:'red',  wordb:'green'}
races     = {worda:worda, wordb:wordb}


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

census_points = hv.Points(df, kdims=['x', 'y'], vdims=['word'])

x_range, y_range = ((-13884029.0, -7453303.5), (2818291.5, 6335972.0)) # Continental USA

shade_defaults = dict(x_range=x_range, y_range=y_range, x_sampling=10, y_sampling=10, width=1200, height=682,
                      color_key=color_key, aggregator=ds.count_cat('word'),)
shaded = datashade(census_points, **shade_defaults)
shaded()

结果看起来像: 在此处输入图像描述, 但我希望点的大小更大,如下所示: 在此处输入图像描述

如何更改我的代码以实现我的目标?谢谢!

4

2 回答 2

2

正如 James A. Bednar 所回答的那样,使用dynspread()可以使数据阴影散点图中的点更大。
您的代码应如下所示:

from holoviews.operation.datashader import datashade, dynspread

dynspread(datashade(your_holoviews_scatterplot))

这可确保数据阴影散点图中的点在屏幕上占据更多像素。

dynspread() 有一些参数会影响标记的大小,另请参阅:
关于 dynspread() 的文档

例如,您可以更改阈值参数以获得更大的标记,尽管它不会使绘图更漂亮。阈值可以保持 0 到 1 之间的值。阈值是一个调整参数,值越高,传播越多。

dynspread(datashade(your_holoviews_scatterplot), threshold=1.0)
于 2019-09-11T10:18:54.170 回答
1

(复制自并行 Github 问题https://github.com/ioam/holoviews/issues/2877#issuecomment-405158027。)

到目前为止,datashader 只包含无限小的点和无限细的线,如果不是图像中像素的非零宽度,它们将是不可见的。添加点或线以具有范围的功能是我们计划最终添加的功能,但现在,您有几个选择:

  1. 降低图像的分辨率,使每个孤立的像素更明显。
  2. 添加“from holoviews.operation.datashader import dynspread”(或“spread”),然后使用 spread 将每个像素扩展到相邻像素。从数学上讲,这与具有非零范围不同,但它是当点相距很远时有效的近似值(就像上面的大多数一样)。两者都有参数,您可以更改这些参数以选择您想要制作点的大小。
于 2018-07-16T14:25:03.380 回答