问题描述
安装包
holoviews 1.14.4、geoviews 1.9.1.、matplotlib 3.4.2.
我想做什么
我正在尝试使用 GeoViews 和 matplolib 后端应用简单的每个功能样式。我无法弄清楚如何将不同的 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')
观察到的行为的屏幕截图
这是来自完整数据集的屏幕。
预期行为
红色填充多边形属于 gdf1
并且应该具有黑色边缘颜色,但它是浅蓝色。蓝色填充多边形属于 gdf2
并且应该具有浅蓝色填充和蓝色边缘颜色,尽管填充和边缘似乎应用了相同的颜色。
我的尝试
我没有使用 group=
参数来指定每个 polygon
元素的样式(这是我通过 datashader documentation 偶然发现的),而是尝试制作多个 opts
按照 Holoviews here 的文档中的建议调用“内嵌”。这也没有效果。
此外,cmap=['color']
是我发现的唯一一种让 GeoViews 不使用 {{1} 中自动检测到的“使用”列的方法}} 作为颜色映射的 gdf1
。这是规范的方法和/或预期的行为吗? vdim
或 color=
似乎没有效果,即使它们在调用 facecolor=
时被列出。
简而言之,我不明白如何为 matplotlib 后端应用这些特定的样式参数,非常感谢您的指点。
2-8 月 21 日编辑
另一个奇怪的行为似乎是,在我的情况下,VSCode-Python 解释器中的图形似乎忠实地表示了符号系统,看起来与 gv.help(gv.opts.polygons)
生成的 .svg 输出不同。以下图像是同一脚本运行的输出。
解释器输出:
gv.save(layout,backend='matlplotlib')
输出:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)