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([])
这给出了
我会尝试
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()
对于那些通过某种搜索引擎遇到这个问题的人:我最近开发了一个综合包来帮助解决这个问题: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})
这并没有真正触及多少东西可以自定义的表面:查看
docs\howto_scale_bar
中的 GitHub 存储库 以了解更多信息。