以下是我尝试可视化的数据示例
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
我希望通过根据与其关联的数字对每个省着色来可视化数据。当我这样做时,Nan的颜色就像色图的最小值。有没有简单的方法将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')
答案 0 :(得分:4)
更新: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
,但是上面的内容对我有用)
答案 1 :(得分:0)
您可以组合两个层次:
## 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)
使用matplotlib
对象查看geopandas文档以了解替代方法。