Непрерывная цветная карта на Cartopy - PullRequest
0 голосов
/ 14 октября 2019

У меня возникли трудности с применением непрерывной цветовой карты 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()

Я не уверен, как вызвать нормализацию на моемпоэтому у меня есть непрерывный диапазон между минимальными и максимальными значениями фрейма данных, и я получаю цвета для соответствующих цветов.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 октября 2019

plt.Normalize создает объект, который обрабатывает сопоставление ваших данных с диапазоном [0, 1], что и требуется для цветовой карты, поэтому вы используете этот экземпляр экземпляра в своих данных перед передачей в cmap. Например:

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

Предполагается, что ваш вызов панд правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...