Skip to content

ENH: 单独发布小而美的添加比例尺和指北针的package #2

@skytruine

Description

@skytruine

不论是有关底图的,还是添加指北针的代码都很赞,点开另一个项目跟到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

  • 对添加指北针和比例尺进行分离的必要性
    在绘图中由对二者进行分离分别放置的实际需求,对旭博士代码进行了简单拆分后实现的效果
    效果

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions