GeoViews:将 matplotlib 样式参数应用于 Polygons 元素 安装包我想做什么可重现的代码示例观察到的行为的屏幕截图预期行为我的尝试2-8 月 21 日编辑

问题描述

安装包

holoviews 1.14.4、geoviews 1.9.1.、matplotlib 3.4.2.

我想做什么

我正在尝试使用 GeoViewsma​​tplolib 后端应用简单的每个功能样式。我无法弄清楚如何将不同的 edgecolor= 参数应用于同一叠加层中的不同 gv.polygons 元素。出于某种原因,它们总是浅蓝色...

同样,facecolor= 似乎没有效果

可重现的代码示例

这使用了完整数据集的一个非常小的样本。

import pandas as pd
import geopandas as gpd
import geoviews as gv
from geoviews import opts

# loading both extensions as the full script calls for user input
# to choose between an interactive or static output

gv.extension('bokeh','matplotlib')

d1 = {'use': {0: 'Residential',1: 'Residential'},'geometry': {0: 'polyGON ((13.80961103741604 51.04076975651729,13.80965521888065 51.04079016168103,13.80963851766593 51.04080454197601,13.80959433642561 51.04078412781548,13.80961103741604 51.04076975651729))',1: 'polyGON ((13.80977831740752 51.04313480566009,13.80987122363639 51.04306085051974,13.8099989591537 51.04312462457182,13.80995486494384 51.04315973323087,13.8099651184249 51.04316486464228,13.80991634926543 51.04320371166482,13.80977831740752 51.04313480566009))'}}

gdf1 = gpd.GeoDataFrame(pd.DataFrame(d1),geometry=gpd.GeoSeries.from_wkt(pd.DataFrame(d1)['geometry']),crs="epsg:4326")

d2 = {'geometry': {1: 'polyGON ((13.80894179055831 51.04544128170094,13.80952887156242 51.0450399782091,13.80954152432486 51.04504668985658,13.80896834397535 51.04545611172818,13.80894179055831 51.04544128170094))'}}

gdf2 = gpd.GeoDataFrame(pd.DataFrame(d2),geometry=gpd.GeoSeries.from_wkt(pd.DataFrame(d2)['geometry']),crs="epsg:4326")

layout = gv.polygons(gdf1,group="group1") * gv.polygons(gdf2,group="group2")

layout.opts(
            opts.polygons('group1',cmap=['red'],edgecolor='black',linewidth=0.5,xaxis=None,yaxis=None,backend="matplotlib"),opts.polygons('group2',cmap=['lightblue'],edgecolor='blue',opts.Overlay(fig_size=500,backend='matplotlib')
        )
        
gv.output(layout,backend='matplotlib')

gv.save(layout,"test.svg",dpi=600,backend='matplotlib')

观察到的行为的屏幕截图

这是来自完整数据集的屏幕。

the red polygons belong to gdf1,the blue ones to gdf3

预期行为

红色填充多边形属于 gdf1 并且应该具有黑色边缘颜色,但它是浅蓝色。蓝色填充多边形属于 gdf2 并且应该具有浅蓝色填充和蓝色边缘颜色,尽管填充和边缘似乎应用了相同的颜色。

我的尝试

我没有使用 group= 参数来指定每个 polygon 元素的样式(这是我通过 datashader documentation 偶然发现的),而是尝试制作多个 opts按照 Holoviews here 的文档中的建议调用“内嵌”。这也没有效果

此外,cmap=['color'] 是我发现的唯一一种让 GeoViews 使用 {{1} 中自动检测到的“使用”列的方法}} 作为颜色映射的 gdf1。这是规范的方法和/或预期的行为吗? vdimcolor= 似乎没有效果,即使它们在调用 facecolor= 时被列出。

简而言之,我不明白如何为 matplotlib 后端应用这些特定的样式参数,非常感谢您的指点。

2-8 月 21 日编辑

一个奇怪的行为似乎是,在我的情况下,VSCode-Python 解释器中的图形似乎忠实地表示了符号系统,看起来与 gv.help(gv.opts.polygons) 生成的 .svg 输出不同。以下图像是同一脚本运行的输出

解释器输出

enter image description here

gv.save(layout,backend='matlplotlib') 输出

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)