如何在matplotlib中的地图中插入比例尺

问题描述 投票:0回答:3

关于如何在 matplotlib 的地图中插入比例尺来显示长度比例,有什么想法吗?就像我附上的一样。

或者也许有任何关于自动测量和显示距离的想法(而不是绘制箭头并手动书写距离!)?

谢谢:)enter image description here

python matplotlib scale matplotlib-basemap
3个回答
31
投票

matplotlib 中已有一个名为 AnchoredSizeBar 的比例尺类。在下面的示例中,AnchoredSizeBar 用于向图像添加比例尺(或映射到 100x100 米的随机区域)。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar
import matplotlib.font_manager as fm
fontprops = fm.FontProperties(size=18)
fig, ax = plt.subplots()
ax.imshow(np.random.random((10,10)),extent=[0,100,0,100]) 

范围定义图像的水平和垂直值的最大值和最小值。

scalebar = AnchoredSizeBar(ax.transData,
                           20, '20 m', 'lower center', 
                           pad=0.1,
                           color='white',
                           frameon=False,
                           size_vertical=1,
                           fontproperties=fontprops)

ax.add_artist(scalebar)

AnchoredSizeBar 的前四个参数是坐标系的变换对象、比例尺长度、标签和位置。更多可选参数会更改布局。这些在文档中都有解释。

ax.set_yticks([])
ax.set_xticks([])

这给出了 Scalebar on an image / a map over a 100x100 meter area of random


15
投票

我会尝试

matplotlib-scalebar
套餐。 (对于像你的例子c这样的东西。)

假设您正在使用

imshow
或类似工具绘制地图图像,并且您知道像素宽度/像元大小(地图图像上一个像素的实际等效大小),您可以自动创建比例尺:

这个示例直接来自 PyPi matplotlib-scalebar 包页面,但这里是为了完整性:

import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
from matplotlib_scalebar.scalebar import ScaleBar

plt.figure()
image = plt.imread(cbook.get_sample_data('grace_hopper.png'))
plt.imshow(image)
scalebar = ScaleBar(0.2) # 1 pixel = 0.2 meter
plt.gca().add_artist(scalebar)
plt.show()

enter image description here


0
投票

对于那些通过某种搜索引擎遇到这个问题的人:我最近开发了一个综合包来帮助解决这个问题:matplotlib-map-utils

它具有专用函数 (

scale_bar()
) 和类 (
ScaleBar
),用于创建具有大量自定义功能的对象。

# Importing
from matplotlib_map_utils.core.scale_bar import ScaleBar, scale_bar
# Setting up a plot
fig, ax = matplotlib.pyplot.subplots(1,1, figsize=(5,5), dpi=150)
# Adding a scale bar to the upper-right corner of the axis, 
# in the same projection as whatever geodata you plotted
# Here, this scale bar will have the "boxes" style
scale_bar(ax=ax, location="upper right", style="boxes", bar={"projection":3857})

rendered scale bar on a plot

这并没有真正触及多少东西可以自定义的表面:查看

docs\howto_scale_bar
中的 GitHub 存储库 以了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.