gpt4 book ai didi

python - matplotlib basemap 绘制与 map 上点的大小相对应的图例

转载 作者:行者123 更新时间:2023-12-01 03:37:24 25 4
gpt4 key购买 nike

我正在使用 matplotlib 的 basemap 功能在 map 上绘制数据点。每个点都根据 5 kM 半径内存在的共现点数量来衡量。我想在底部放置一个与不同规模的爆发相对应的引用表,但我不知道如何做到这一点。这是我到目前为止的代码:

map = Basemap(llcrnrlon=-20.,llcrnrlat=-40,urcrnrlon=160.,urcrnrlat=40.,projection='cyl', lat_0=13.5317, lon_0=2.4604)
map.drawmapboundary(fill_color='paleturquoise')
map.fillcontinents(color='olivedrab',lake_color='paleturquoise')
map.drawcoastlines()
map.drawcountries()
map.drawstates()
used = set()
for i,j,k,n in DATA:
if map.is_land(i,j):
if k in used: continue
used.add(k)
alpha = 0.5
if n == 1:
alpha = 1

n *= 3
map.plot(i, j, marker='o',color='r',ms=n, alpha=alpha)

plt.show()

注意,DATA 是一个 4 元组的列表。 4 元组中的每个条目对应于(纬度、经度、对应于 5x5 公里正方形内同时出现的点的唯一 ID、具有相同 uniq ID 的点的数量)

结果:

enter image description here

最佳答案

最明显的选择是首先在 matplotlib 中创建自定义标签和句柄,然后用它们初始化自定义图例。例如,如果我们选择五个点大小(范围从 1 到 5)的“展示”样本,您可能需要执行以下操作:

def outbreak_artist(size):
""" Returns a single-point marker artist of a given size """
# note that x3 factor corresponds to your
# internal scaling within the for loop
return plt.Line2D((0,), (0,), color='r', marker='o',
ms=size*3, alpha=alpha, linestyle='')

sizes = [1, 2, 3, 4, 5]

# adapted from https://stackoverflow.com/a/4701285/4118756
# to place the legend beneath the figure neatly
ax = plt.gca()
box = ax.get_position()
ax.set_position([box.x0, box.y0 + box.height * 0.1,
box.width, box.height * 0.9])

red_dots = [outbreak_artist(size) for size in sizes]
labels = ["{} outbreaks".format(size) for size in sizes]

ax.legend(red_dots, labels, loc='upper center',
bbox_to_anchor=(0.5, -0.05), ncol=5)

plt.show()

umbrella_corps_ltd

我稍微调整了图例的位置,将其从this之后的情节中取出。发布。

P.S.:我想我在制作 Basemap 之前运行了 fig, ax = plt.subplots(figsize = (9.44, 4.76)) 以使图例大小与 map 大小。

关于python - matplotlib basemap 绘制与 map 上点的大小相对应的图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40184091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com