python - 如何显示 basemap 的颜色条

标签 python matplotlib matplotlib-basemap colorbar

我有一个shapefile以及这样的系列:

UF
Acre                     261
Alagoas                  657
Amazonas                 793
Amapá                    162
Bahia                   1867
Ceará                   5657
Distrito Federal         430
Espírito Santo          1734
Goiás                   4110
Maranhão                1421
Minas Gerais           11812
Mato Grosso do Sul      1006
Mato Grosso             1391
Pará                    1889
Paraíba                 1575
Pernambuco              4019
Piauí                   1665
Paraná                  3745
Rio de Janeiro          1613
Rio Grande do Norte     1998
Rondônia                3102
Roraima                  237
Rio Grande do Sul       5643
Santa Catarina          5372
Sergipe                  413
São Paulo               8237
Tocantins                771
Name: 0, dtype: int64

其中 UF 是 shapefile 中显示的州名称,系列值是我想要用来生成颜色以填充 basemap 的值。这是我到目前为止得到的:

import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from mpl_toolkits.basemap import Basemap
import matplotlib.cm as cm
import matplotlib as mpl
from matplotlib.collections import PatchCollection


def make_map(ax):
    m = Basemap(projection='merc', llcrnrlat=-35, urcrnrlat=7,
                llcrnrlon=-77, urcrnrlon=-32, resolution='i', ax=ax)
    m.fillcontinents()
    return m

def drawstates(fig, ax, data, shapefile='../BRA_adm_shp/BRA_adm1'):
    shp = m.readshapefile(shapefile, 'states', drawbounds=False)

    norm = mpl.colors.Normalize(vmin=data.min(), vmax=data.max())
    cmap = cm.hot
    sm = cm.ScalarMappable(norm=norm, cmap=cmap)
    colors = []
    patches = []

    for nshape, seg in enumerate(m.states):
        uf = m.states_info[nshape]['NAME_1']
        color  = sm.to_rgba(data[uf])
        poly = Polygon(seg, facecolor=color, edgecolor='white')
        ax.add_patch(poly)
        patches.append(poly)
        colors.append(color)

    p = PatchCollection(patches, cmap=cmap)
    p.set_array(np.array(colors))
    cb = fig.colorbar(p, ax=ax, orientation='horizontal')

fig, axes = plt.subplots(1, 2, figsize=(20, 10))
m = make_map(axes[0])
drawstates(fig, m.ax, m1)

这导致:

enter image description here

我不确定这是否是正确的方法,但我想知道如何保留输入值的比例,即不在 0 和 1 之间缩放颜色条,以及如何防止这么大的距离在 map 及其颜色条之间。

最佳答案

多边形根据 ScalaMappable sm 进行着色。因此,这个 ScalarMappable 是您想要作为颜色图参数提供的 ScalarMappable

sm = cm.ScalarMappable(norm=norm, cmap=cmap)
sm.set_array([]) # can be an empty list, only needed for matplotlib < 3.1
# ...
cb = fig.colorbar(sm, ax=ax, orientation='horizontal')

轴和颜色条之间的填充可以使用 pad 参数设置。默认值应为 pad=0.15,您需要自己找到一个合适的值。

关于python - 如何显示 basemap 的颜色条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495901/

相关文章:

python-3.x - 在 Cartopy 中使用 Google map 图 block

python - 消除 Matplotlib/Basemap pcolor 图中的白边

java - Pyjnius 自定义 java 方法返回 'JavaException: Unable to find a None Method' 在 Public Static 之后工作

python - 使用来自另一个数据帧的值更新数据帧 header

python 安装 numpy 和 matplotlib 异常(使用 pip)

python - 如何将绘图添加到子图 matplotlib

python - 在 spyder 中导入 basemap 时出错

Python Matplotlib basemap - 如何设置缩放级别

python - 使用神经网络的传播模型(我是初学者)

python - python中多维搜索的最佳算法