【问题标题】:Continuous Color Map on CartopyCartopy 上的连续彩色图
【发布时间】:2019-10-14 15:27:49
【问题描述】:

我在将 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()

我不确定如何在我的数据集上调用规范化,因此我的最小和最大数据帧值之间有一个连续范围,并让状态适当地着色。

任何帮助表示赞赏。

【问题讨论】:

    标签: python cartopy


    【解决方案1】:

    plt.Normalize 创建一个对象来处理将您的数据映射到范围 [0, 1],这是颜色图正在寻找的,因此您在传递给 cmap 之前在您的数据上使用此实例实例。喜欢:

    norm = plt.Normalize(min_val, max_val)
    color = cmap(norm(df.loc[state.attributes['name'], 'value']))
    

    假设您的 pandas 调用是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 2023-04-05
      • 2018-01-26
      • 2019-06-26
      • 2023-03-27
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      相关资源
      最近更新 更多