亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 GeoJSONDataSource 和 CategoricalColorMapper

如何使用 GeoJSONDataSource 和 CategoricalColorMapper

UYOU 2021-11-16 15:32:52
我正在嘗試為散景補丁圖添加一個圖例,但我最終只有一個圖例項(并且標簽錯誤)。我有一個多邊形的形狀文件。每個多邊形都有一個名為“類別”的屬性,它可以取值“A”、“B”、“C”、“D”和“E”。我將形狀文件轉換為 geojson 并隨后創建一個散景圖塊圖,使用 CategoricalColorMapper 根據它所在的“類別”為每個多邊形添加顏色?,F在我希望圖例顯示五個類別選項及其各自的顏色。這是我的代碼:import geopandas as gpdfrom bokeh.io import show, output_notebook, output_file, export_pngfrom bokeh.models import GeoJSONDataSource, CategoricalColorMapper, Legend, LegendItemfrom bokeh.plotting import figure, reset_outputfrom bokeh.transform import factor_cmapimport seleniumimport numpy as npgdf = gpd.GeoDataFrame.from_file("test.shp")gdf_json = gdf.to_json()source_shape = GeoJSONDataSource(geojson=gdf_json)cmap = CategoricalColorMapper(palette=["black", "purple", "pink", "brown", "blue"], factors=['A','B','C','D', 'E'])p = figure(height=500, match_aspect=True,    h_symmetry=False, v_symmetry=False, min_border=0)p.patches('xs', 'ys', source=source_shape, fill_color={'field': 'category', 'transform': cmap},             line_color='black', line_width=0.5, legend='category')export_png(p, filename="map.png")但是,我得到的輸出如下: map.png output圖例僅顯示一項,帶有標簽“類別”而不是實際類別名稱。我該如何解決這個問題,以便圖例顯示所有 5 個類別及其標簽(A、B、C、D、E)?
查看完整描述

2 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

這段代碼可以滿足您的要求,但是,我認為GeoDataFrame直接操作而不是轉換為JSON. 此代碼與 Bokeh v1.0.4 兼容。


from bokeh.models import GeoJSONDataSource, CategoricalColorMapper

from bokeh.plotting import figure, show

from bokeh.io import export_png

import geopandas as gpd

import random

import json


gdf = gpd.GeoDataFrame.from_file("Judete/Judete.shp")

gdf_json = gdf.to_json()

gjson = json.loads(gdf_json)


categories = ['A', 'B', 'C', 'D', 'E']

for item in gjson['features']:

    item['properties']['category'] = random.choice(categories)


source_shapes = {}

for category in categories:

    source_shapes[category] = {"type": "FeatureCollection", "features": []}


for item in gjson['features']:

    source_shapes[item['properties']['category']]['features'].append(item)


p = figure(match_aspect = True, min_border = 0,

           h_symmetry = False, v_symmetry = False,

           x_axis_location = None, y_axis_location = None)


cmap = CategoricalColorMapper(palette = ["orange", "purple", "pink", "brown", "blue"], 

                              factors = ['A', 'B', 'C', 'D', 'E'])

for category in categories:

    source_shape = GeoJSONDataSource(geojson = json.dumps(source_shapes[category]))

    p.patches('xs', 'ys', fill_color = {'field': 'category', 'transform': cmap},

                          line_color = 'black', line_width = 0.5,

                          legend = category, source = source_shape,)

p.legend.click_policy = 'hide'

show(p) # export_png(p, filename = "map.png")

結果:

http://img1.sycdn.imooc.com//61935ee2000134fb04030294.jpg

查看完整回答
反對 回復 2021-11-16
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

似乎圖例當前不與 GeoJSONDataSource 一起使用,因為存在一個未解決的未解決問題Legend 不與 GeoJSONDataSource #5904 一起使用


查看完整回答
反對 回復 2021-11-16
  • 2 回答
  • 0 關注
  • 258 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號