Как я могу установить специальный цвет для «Нэн» на моем графике?

Вот пример данных, которые я пытаюсь визуализировать

Prince Edward Island    2.333
Manitoba                2.529
Alberta                 2.6444
British Columbia        2.7902
Saskatchewan            2.9205
Ontario                 3.465
New Brunswick           3.63175
Newfoundland and Labrador   3.647
Nova Scotia             4.25333333333
Quebec                  4.82614285714
Nunavut                 NaN
Yukon                   NaN
Northwest Territories   NaN

Я хочу визуализировать данные, окрашивая каждую провинцию в соответствии с номером, с которым она связана. Когда я это делаю, Нан окрашивается как минимальное значение палитры. Есть ли простой способ сопоставить Нэн с белым?

Вот мой код:

plt.figure(figsize=(15,15)) 


vmin, vmax = canada.Partying.min(), canada.Partying.max()

ax = canada.plot(column='Partying', cmap='viridis', vmin=vmin, vmax=vmax)

# add colorbar
fig = ax.get_figure()
cax = fig.add_axes([0.9, 0.1, 0.03, 0.8])
sm = plt.cm.ScalarMappable(cmap='viridis', norm=plt.Normalize(vmin=vmin, vmax=vmax))
# fake up the array of the scalar mappable. Urgh...
sm._A = []
fig.colorbar(sm, cax=cax)
plt.savefig('Canada.pdf')

person Demetri Pananos    schedule 20.07.2016    source источник
comment
Как насчет замены значений NaN определенным значением? Как 2_   -  person ysearka    schedule 20.07.2016
comment
Фильтровать значения nan: canada = canada.dropna(thresh=1).   -  person Serenity    schedule 20.07.2016
comment
@ysearka Я хочу, чтобы провинции были белыми. Заполнение их значением сопоставит их с небелым цветом.   -  person Demetri Pananos    schedule 20.07.2016
comment
@Serenity Если я брошу Нанов, провинции не будут нанесены на карту   -  person Demetri Pananos    schedule 20.07.2016


Ответы (2)


Обновление: новая функция в geopandas решает вашу проблему: теперь вы можете использовать:

ax = canada.plot(column='Partying', cmap='viridis', vmin=vmin, vmax=vmax,
     missing_kwds= dict(color = "lightgrey",) )

Сделать все отсутствующие области данных светло-серыми.

См. https://geopandas.readthedocs.io/en/latest/mapping.html (на самом деле в документации может быть указано, что параметр missing_kwdsdict, но у меня выше работает)

person CPBL    schedule 12.01.2020

Вы можете комбинировать два слоя:

## import statements
import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt

## load the Natural Earth data set 
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

## add a column with NaNs
## here we set all countries with a population > 10e7 to nan
world["pop_est_NAN"] = world.pop_est.apply(lambda x: x if x <10e7 else np.nan)

## first layer, all geometries included 
ax = world.plot(color="grey")

## second layer, NaN geometries excluded
## we skip the entries with NaNs by calling .dropna() on the dataframe
## we reference the first layer by ax=ax
## we specify the values we want to plot (column="pop_est")
world.dropna().plot(ax=ax, column="pop_est")

## add title
ax.set_title("Countries with a population > 10e7 (= missing values) \nare plotted in grey");

## save fig
plt.savefig("geopandas_nan_plotting.png", dpi=200)

geopandas_nan_plotting

Взгляните на документацию геопанды, чтобы узнать об альтернативном методе с использованием matplotlib объектов.

person eotp    schedule 16.12.2017