不论是有关底图的,还是添加指北针的代码都很赞,点开另一个项目跟到b站,高呼666。
考虑到geopandas官方做了contextily用来满足对底图的需求,而比例尺仅仅是新开了修DOC的ISSUE-提到用matplotlib-scalebar(我觉得不太好用,库的主力开发者对map也不熟),完全看不到要在geopandas源码里支持比例尺、指北针的样子(就像geopandas一直不管Polygon要素图例不显示的问题一样,期望第三方搞定),我认为旭博士可以把plot_map中关于指北针和比例尺的部分抽离出来,单独发布一个小而美的package,可以预见会这是一个很不错的项目。如果旭博士有这个想法,请联系我(小O,微信:skytruine,华盛顿大学Geography Phd Student,Pesonal Web, 有开源项目:矢量地理数据获取与预处理工具OSpider),我很乐意成为核心开发团队的成员。如果长期未被联系的话,我可能会自己单独开一个新项目。
目前plot_map.plotscale我认为至少可以存在这么几个改进点:
- 为实现配图的灵活性,应当把添加指北针和比例尺的功能拆分,如
add_scalebar(ax,*args,**kwargs) add_compass(ax,*args,**kwargs)
- 个人觉得利用matplotlib自定义符号的方式添加指北针更好,这既方便了指北针样式的扩充,也有利于若日后geopandas等库支持绘制旋转后的map了,咱再对添加指北针的功能进行跟进式的扩展。
- 另外目前accuracy参数用起来不够直观,我认为对外部单纯暴露出scale bar的宽高更好,这涉及到改内部实现。
- 目前手动定义bounds挺麻烦的,这个信息本就蕴含在ax中了,我认为外部传入ax和crs更好。这将使调用更简洁。
##附录##
-geopandas通过contextily实现对底图的支持
import geopandas
import contextily as ctx
df = geopandas.read_file(geopandas.datasets.get_path('nybb'))
df = df.to_crs(epsg=3857)
ax = df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
ctx.add_basemap(ax)

-勉强能用的matplotlib-scalebar
虽然调用挺简单,但由于并不是专门针对map的,所以样式和对crs的支持总让人想吐槽。源码可以借鉴的地方到是不少。
import geopandas as gpd
from matplotlib_scalebar.scalebar import ScaleBar
import matplotlib.pyplot as plt
df = gpd.read_file(gpd.datasets.get_path('nybb'))
ax = df.to_crs(32619).plot() # re-projecting from feet to metres
ax.add_artist(ScaleBar(1))
![效果]https://user-images.githubusercontent.com/36797143/91764492-4cf36a80-ebcf-11ea-87b0-66f1516b4ce2.png
- 对添加指北针和比例尺进行分离的必要性
在绘图中由对二者进行分离分别放置的实际需求,对旭博士代码进行了简单拆分后实现的效果

不论是有关底图的,还是添加指北针的代码都很赞,点开另一个项目跟到b站,高呼666。
考虑到geopandas官方做了contextily用来满足对底图的需求,而比例尺仅仅是新开了修DOC的ISSUE-提到用matplotlib-scalebar(我觉得不太好用,库的主力开发者对map也不熟),完全看不到要在geopandas源码里支持比例尺、指北针的样子(就像geopandas一直不管Polygon要素图例不显示的问题一样,期望第三方搞定),我认为旭博士可以把plot_map中关于指北针和比例尺的部分抽离出来,单独发布一个小而美的package,可以预见会这是一个很不错的项目。如果旭博士有这个想法,请联系我(小O,微信:skytruine,华盛顿大学Geography Phd Student,Pesonal Web, 有开源项目:矢量地理数据获取与预处理工具OSpider),我很乐意成为核心开发团队的成员。如果长期未被联系的话,我可能会自己单独开一个新项目。
目前plot_map.plotscale我认为至少可以存在这么几个改进点:
add_scalebar(ax,*args,**kwargs)add_compass(ax,*args,**kwargs)##附录##
-geopandas通过contextily实现对底图的支持
-勉强能用的
matplotlib-scalebar虽然调用挺简单,但由于并不是专门针对map的,所以样式和对crs的支持总让人想吐槽。源码可以借鉴的地方到是不少。
![效果]https://user-images.githubusercontent.com/36797143/91764492-4cf36a80-ebcf-11ea-87b0-66f1516b4ce2.png
在绘图中由对二者进行分离分别放置的实际需求,对旭博士代码进行了简单拆分后实现的效果