Ich habe mir das genauer angesehen und festgestellt, dass die Plotdatei von GeoPandas (v0.14.4) zunächst eine Liste davon erstellt Werte sind nan:
nan_idx = np.asarray(pd.isna(values), dtype="bool")
Dann wird die Variable „values“ so zurückgesetzt, dass sie alle Werte enthält, die nicht nan sind:
values = cat.codes[~nan_idx]
und dann füllt es Nans mit einem Platzhalter, damit es sie richtig darstellen kann:
for n in np.where(nan_idx)[0]:
values = np.insert(values, n, values[0])
Und hier liegt das Problem! Da die Spalte nur Nans enthält, erhalte ich einen IndexError von „values[0]“, da sie jetzt leer ist. Dies wurde erneut bestätigt, indem ein Wert in einen Gleitkommawert geändert wurde, und es funktionierte einwandfrei. Zeichnen der Nan-Werte als fehlende Werte.
Kann mir jemand sagen, ob es eine andere Möglichkeit gibt, Spalten mit allen Nan-Werten darzustellen, oder ob dieses Problem in neueren Versionen von GeoPandas behoben wurde? Es ist wichtig zu zeigen, dass es sich bei allen Werten um „fehlende Werte“ handelt, da dies nur zeigt, dass diese bestimmte Spalte nicht möglich ist.
Der gesamte oben genannte Code ist in den Geopandas/Plots zu finden. py-Datei für GeoPandas (v0.14.4) und geschieht innerhalb der plot()-Funktion im Snippet meines Codes unten (wobei name der Spaltenname ist und Sechsecke sich auf eine Geopandas-DF beziehen):
import geopandas as gpd
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
def plot_and_save(crs, name, legend_kwds, output_folder, figsize=(10,5), legend=True, cmap='viridis_r',
missing_kwds={"color": "lightgrey", "label": "Missing values",},
bbox_inches="tight",
):
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()
hexagons = gpd.read_file("results/hexfile.geojson")
hexagon_bounds = hexagons.geometry.bounds
min_lon, min_lat = hexagon_bounds[['minx','miny']].min()
max_lon, max_lat = hexagon_bounds[['maxx','maxy']].max()
central_lon = (min_lon + max_lon)/2
central_lat = (min_lat + max_lat)/2
crs = ccrs.Orthographic(central_longitude = central_lon, central_latitude= central_lat)
output_folder = 'plots/results'
plot_and_save(crs, 'pipeline transport costs', {'label':'pipeline cost [euros/kg]'}, output_folder)
So sieht ein Diagramm aus, wenn es Werte für alles hat:
[img]https://i.sstatic.net /AwXE6l8J.png[/img]
Und hier ist ein Plot, der nur einen Wert hat. Ich hätte gerne einen Plot, der gerade vollständig ausgegraut ist:
