我在将matplotlib连续颜色图应用于值并将其正确绘制在Cartopy中时遇到一些困难。
我有一些与数据框中的状态相对应的值,我想使用RdBu
这样的双色连续刻度。颜色应以0为中心(正数表示一种颜色的阴影越来越浓,负数表示另一种颜色的强度越来越深,它们得到的负数越大)。我不确定如何将这些值标准化并添加到斧头中。
代码的关键元素如下:
import cartopy.crs as ccrs
from cartopy.io import shapereader
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
series = pd.Series([0.05,0.07,-0.02,-0.01],
index=['Arkansas','Alabama','Texas','Illinois'])
df = pd.DataFrame([series], columns=['values'])
#Note: Assume dataframe has index/values for all states
shapes = ne_110m_admin_1_states_provinces.shp'
reader = shapereader.Reader(shapes)
shapes = list(reader.geometries())
states = reader.records()
fig, ax = plt.subplots(figsize=(20, 15))
projection = ccrs.AlbersEqualArea(central_longitude=-100)
ax1 = fig.add_axes([-.05, -.05, 1.2, 1.2], projection=projection)
ax1.set_extent([-125, -66.5, 20, 50])
cmap = mpl.cm.RdBu
for i, state in enumerate(states):
ax1.add_geometries(shapes[i], ccrs.PlateCarree(),
edgecolor='black',
facecolor=cmap(df.loc[state.attributes['name'], 'value']),
alpha=0.5, )
plt.show()
我不确定如何在数据集上调用规范化,因此我在最小和最大数据帧值之间具有连续范围,并使状态适当地着色。
感谢任何帮助。
plt.Normalize
创建一个对象,该对象处理将数据映射到范围[0,1](这是色图所要查找的范围),因此您在传递给cmap之前在数据上使用此实例实例。喜欢:
norm = plt.Normalize(min_val, max_val)
color = cmap(norm(df.loc[state.attributes['name'], 'value']))
假设您的熊猫调用正确。