You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Bokeh Figure上使用Datashader方法?百万级点地图优化问询

Bokeh + Datashader Integration Questions Answered

1. Can I use Datashader methods directly on a Bokeh Figure?

Great question! You can't call Datashader methods directly on a Bokeh Figure object (they're separate libraries with distinct APIs), but integrating Datashader's optimized rendering into your Bokeh Figure is totally straightforward.

Datashader’s core purpose is to turn massive datasets into raster images, which you can then plug into your Bokeh plot as an ImageRGBA glyph. Here’s a quick breakdown of the workflow:

First, render your millions of points with Datashader:

import datashader as ds
from datashader.transfer_functions import shade

# Assume your data is in a pandas DataFrame `df` with 'lon'/'lat' for map coordinates
cvs = ds.Canvas(plot_width=800, plot_height=600, x_range=your_map_x_range, y_range=your_map_y_range)
aggregated = cvs.points(df, 'lon', 'lat')
datashaded_img = shade(aggregated, how='eq_hist')  # Adjust shading to your preference

Then convert that raster to a Bokeh-compatible image and add it to your existing Figure:

from bokeh.models import ImageRGBA

# p is your existing map Figure
bokeh_raster = ImageRGBA(
    image=[datashaded_img.data],
    x=cvs.x_range[0],
    y=cvs.y_range[0],
    dw=cvs.x_range[1] - cvs.x_range[0],
    dh=cvs.y_range[1] - cvs.y_range[0]
)
p.add_glyph(bokeh_raster)

If you want to skip boilerplate, use datashader.bokeh.rasterize — it handles conversion and adding to the Figure in one step, plus it automatically updates when you pan/zoom the plot!


2. Are there other Bokeh-compatible Datashader tools besides InteractiveImage?

Absolutely! InteractiveImage was an older approach, and the Datashader ecosystem has evolved to offer more flexible options for Bokeh integration:

This is the go-to tool for most cases. It directly integrates with your Bokeh Figure, handles dynamic pan/zoom updates (both static and server-side), and keeps your code clean.

Example with a map plot:

from datashader.bokeh import rasterize
from bokeh.plotting import figure, show

# Set up your base map Figure
p = figure(
    x_range=(df.lon.min(), df.lon.max()),
    y_range=(df.lat.min(), df.lat.max()),
    tools="pan,wheel_zoom,reset",
    title="Datashaded Million-Point Map"
)

# Add the datashaded points in one line
rasterize(p, df, 'lon', 'lat', shade_fn=lambda agg: shade(agg, cmap='viridis'))

show(p)

- HoloViews DynamicMap (For Interactive Dashboards)

If you need to build interactive dashboards where users can tweak visualization parameters (like changing colormaps or aggregation methods), HoloViews pairs perfectly with Datashader and Bokeh. It lets you create a DynamicMap that automatically re-renders with Datashader when parameters change, then converts to a Bokeh Figure.

Example:

import holoviews as hv
from holoviews.operation.datashader import datashade
hv.extension('bokeh')

# Create a HoloViews Points object from your data
points = hv.Points(df, ['lon', 'lat'])

# Apply datashading with dynamic updates
datashaded_plot = datashade(points, width=800, height=600, cmap='magma')

# Convert to a Bokeh Figure and show it
bokeh_fig = hv.render(datashaded_plot)
show(bokeh_fig)

- Custom Callbacks (For Advanced Control)

For edge cases where you need full control over pan/zoom events or want to integrate Datashader with custom Bokeh widgets, you can use the callback utilities in datashader.bokeh.callbacks. This lets you manually trigger Datashader re-renders when the plot's viewport changes, then update the Bokeh glyph with the new raster. It requires more code, but gives you complete flexibility.

To sum up:

  • Use rasterize for simple, efficient integration with existing Bokeh Figures.
  • Use HoloViews DynamicMap if you need interactive parameter tuning.
  • Use custom callbacks only when you need to extend default behavior beyond what the other tools offer.

内容的提问来源于stack exchange,提问作者Cracken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:00:24