Python 2.7 bokeh-使用datashader绘制形状文件地图
最初,我创建了一个英国邮政编码区的交互式地图,其中单个区域根据其值(例如,该邮政编码区的人口)以颜色表示,如下所示Python 2.7 bokeh-使用datashader绘制形状文件地图,python-2.7,bokeh,datashader,Python 2.7,Bokeh,Datashader,最初,我创建了一个英国邮政编码区的交互式地图,其中单个区域根据其值(例如,该邮政编码区的人口)以颜色表示,如下所示 from bokeh.plotting import figure from bokeh.palettes import Viridis256 as palette from bokeh.models import LinearColorMapper from bokeh.models import ColumnDataSource import geopandas as gpd
from bokeh.plotting import figure
from bokeh.palettes import Viridis256 as palette
from bokeh.models import LinearColorMapper
from bokeh.models import ColumnDataSource
import geopandas as gpd
shp = 'file_path_to_the_downloaded_shapefile'
#read shape file into dataframe using geopandas
df = gpd.read_file(shp)
def expandMultiPolygons(row, geometry):
if row[geometry].type = 'MultiPolygon':
row[geometry] = [p for p in row[geometry]]
return row
#Some rows were in MultiPolygons instead of Polygons.
#Expand MultiPolygons to multi rows of Polygons
df = df.apply(expandMultiPolygons, geometry='geometry', axis=1)
df = df.set_index('Area')['geometry'].apply(pd.Series).stack().reset_index()
#Visualize the polygons. To visualize different colors for different post areas, I added another column called 'value' which has some random integer value.
p = figure()
color_mapper = LinearColorMapper(palette=palette)
source = ColumnDataSource(df)
p.patches('x', 'y', source=source,\
fill_color={'field': 'value', 'transform': color_mapper},\
fill_alpha=1.0, line_color="black", line_width=0.05)
其中df是由四列组成的数据框:邮政编码区、x坐标、y坐标、值(即人口)
上面的代码在web浏览器上创建了一个交互式地图,这很好,但我注意到交互速度不是很平稳。如果放大或移动贴图,它会缓慢渲染。数据帧的大小只有1106行,所以我很困惑为什么它这么慢
作为一种可能的解决方案,我遇到了datashader(),但我发现示例脚本相当复杂,其中大多数都是Jupyter笔记本上的holoview包,但我想使用bokeh创建一个仪表板
有人建议我将datashader合并到上面的bokeh脚本中吗?我是否需要datashader中的另一个函数来创建形状贴图,而不是使用bokeh的patches函数
任何建议都将不胜感激 如果没有数据文件,我无法直接回答您的问题,但可以提供一些观察结果:
如果没有数据文件,我无法直接回答您的问题,但可以提供一些观察结果:
正如我在评论中提到的,我相信多边形的复杂性可能会导致您的问题。链接到的文件包含多个不同大小和复杂程度的形状文件。您可以简化这些,即减少每个多边形的点数。这可以改变它们的外观。它的范围可以从几乎没有差别的“前卫”到棱角分明的外观。这取决于您选择的简化级别。根据您的需要,您可以选择不同级别的简单性 我知道有三种简单的方法可以完成这项工作:
ogr2ogr outfile.shp infle.shp-simplify 0.000001
使用HoloView或GeoView不会对您的性能产生积极影响。因此,它与您的问题无关。我猜@James A.Bednar只是给了一些附带的建议 正如我在评论中提到的,我相信多边形的复杂性可能会导致您的问题。链接到的文件包含多个不同大小和复杂程度的形状文件。您可以简化这些,即减少每个多边形的点数。这可以改变它们的外观。它的范围可以从几乎没有差别的“前卫”到棱角分明的外观。这取决于您选择的简化级别。根据您的需要,您可以选择不同级别的简单性 我知道有三种简单的方法可以完成这项工作:
ogr2ogr outfile.shp infle.shp-simplify 0.000001