已安装的软件包
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', linewidth=0.5, backend="matplotlib"),
opts.Overlay(fig_size=500, backend='matplotlib')
)
gv.output(layout, backend='matplotlib')
gv.save(layout, "test.svg", dpi=600, backend='matplotlib')
观察到的行为的屏幕截图
这是来自完整数据集的屏幕。
预期行为
红色填充多边形属于gdf1
并且应该具有黑色边缘颜色,但它是浅蓝色。蓝色填充多边形属于gdf2
并且应该具有浅蓝色填充和蓝色边缘颜色,尽管相同的颜色似乎应用于填充和边缘。
我试过的
我没有使用该group=
参数来指定每个元素的样式(我不小心通过datashader 文档Polygon
偶然发现),而是尝试按照 HoloViews 文档中的建议进行多次“内联”调用。这也没有效果。opts
此外,cmap=['color']
这是我发现让GeoViews 不使用自动检测到的“使用”列gdf1
作为vdim
颜色映射的唯一方法。这是规范的方法和/或预期的行为吗?color=
或者facecolor=
即使在调用时列出它们似乎也没有效果gv.help(gv.opts.Polygons)
。
简而言之,我不明白如何为 matplotlib 后端应用这些特定的样式参数,并且非常感谢任何指针。
21 年 8 月 2 日 编辑
另一个奇怪的行为似乎是,在我的情况下,VSCode-Python 解释器中的图形似乎忠实地表示了符号系统,看起来与 .svg 生成的输出不同gv.save(layout, "test.svg", dpi=600, backend='matlplotlib')
。下图是同一脚本运行的输出。
解释器输出:
gv.save()
输出: