最初に、英国の郵便番号エリアのインタラクティブ マップを作成しました。ここでは、個々のエリアがその値 (たとえば、その郵便番号エリアの人口) に基づいて次のように色で表されます。
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 は 4 つの列のデータフレームです: 郵便番号エリア、x 座標、y 座標、値 (人口)。
上記のコードは Web ブラウザー上でインタラクティブなマップを作成しますが、これは素晴らしいものですが、インタラクティブ性があまりスムーズではないことに気付きました。マップを拡大または移動すると、レンダリングが遅くなります。データフレームのサイズはわずか 1106 行なので、なぜこんなに遅いのか、かなり混乱しています。
考えられる解決策の 1 つとして、データシェーダー ( https://datashader.readthedocs.io/en/latest/ ) を見つけましたが、サンプル スクリプトは非常に複雑であり、それらのほとんどは Jupyter ノートブックのホロビュー パッケージを使用していますが、私はBokeh を使用してダッシュボードを作成したい。
上記のボケスクリプトにデータシェーダーを組み込むことについて誰かにアドバイスしてもらえますか? bokeh のパッチ関数を使用する代わりに、データシェーダー内でシェイプ マップを作成する別の関数が必要ですか?
どんな提案でも大歓迎です!!!