我的代码运行一个 geojson 文件,并一一绘制该文件中的列,以向用户显示优化的成本。它运行得很好,直到遇到一列只有 nan 值的情况。
我对此做了一些研究,发现 Geopandas (v0.14.4) 绘图文件首先创建一个值为 nan 的列表:
nan_idx = np.asarray(pd.isna(values), dtype="bool")
然后重置
values
变量以包含所有非 nan 的值:
values = cat.codes[~nan_idx]
然后用占位符填充 nan,以便可以正确绘制它们:
for n in np.where(nan_idx)[0]:
values = np.insert(values, n, values[0])
这就是问题所在!由于该列只包含 nan,我从
values[0]
收到一个 IndexError,因为它现在是空的。通过将一个值更改为浮点数再次确认了这一点,并且它工作得很好;将 nan 绘制为缺失值。
谁能告诉我是否有另一种方法来绘制包含所有 nan 值的列,或者这个问题是否已在较新版本的 GeoPandas 中得到解决?重要的是要表明这些值都是“缺失值”,因为这只会表明该特定列不可行。
代码片段是(其中
name
是列名称,hexagons
指的是Geopandas df):
fig = plt.figure(figsize=figsize)
ax = plt.axes(projection=crs)
ax.set_axis_off()
hexagons.to_crs(crs.proj4_init).plot(
ax=ax,
column = name,
legend = legend,
cmap = cmap,
legend_kwds = legend_kwds,
missing_kwds = missing_kwds,
)
ax.set_title(name)
fig.savefig(output_folder + f"/{name}.png", bbox_inches=bbox_inches)
plt.close()
要处理仅包含 NaN 值的列,您可以在绘图步骤之前添加检查,以确保该列不为空或填充 NaN 值。如果是,您可以跳过该列的绘图或提供占位符值。这是代码的更新版本,应该会有所帮助:
蟒蛇 科皮亚扎科杜尔 将 geopandas 导入为 gpd 将 numpy 导入为 np 将 matplotlib.pyplot 导入为 plt 将 pandas 导入为 pd
defplot_with_nan_check(六边形,名称,figsize=(10, 10),crs=无,图例=False,cmap='viridis', legend_kwds=无,missing_kwds=无,output_folder='./',bbox_inches='紧'):
# Check if the column contains only NaN values
if hexagons[name].isna().all():
print(f"Column '{name}' contains only NaN values.")
# Handle this case, e.g., by assigning a placeholder value or skipping the plot
values = np.zeros(len(hexagons)) # You can adjust this placeholder value as needed
else:
values = hexagons[name]
fig = plt.figure(figsize=figsize)
ax = plt.axes(projection=crs)
ax.set_axis_off()
hexagons.to_crs(crs.proj4_init).plot(
ax=ax,
column=name,
legend=legend,
cmap=cmap,
legend_kwds=legend_kwds,
missing_kwds=missing_kwds,
)
ax.set_title(name)
fig.savefig(output_folder + f"/{name}.png", bbox_inches=bbox_inches)
plt.close()