Первоначально я создал интерактивную карту области почтового индекса Великобритании, где отдельная область представлена цветом в зависимости от ее значения (например, численность населения в этой области почтового индекса), как показано ниже.
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, значение (т. е. численность населения).
Приведенный выше код создает интерактивную карту в веб-браузере, что здорово, но я заметил, что интерактивность не очень гладкая по скорости. Если я увеличиваю масштаб или перемещаю карту, она отображается медленно. Размер фрейма данных составляет всего 1106 строк, поэтому я не понимаю, почему он такой медленный.
В качестве одного из возможных решений я наткнулся на datashader (https://datashader.readthedocs.io/en/latest/), но я считаю, что пример сценария довольно сложен, и большинство из них имеют пакет holoview в блокноте Jupyter, но я хочу создать информационную панель с использованием боке.
Кто-нибудь посоветует мне включить даташейдер в приведенный выше скрипт боке? Нужна ли мне другая функция в datashader для создания карты формы вместо использования функции исправлений боке?
Любое предложение будет высоко оценено !!!