2016-03-15 4 views
5

Ich versuche eine Matplotlib Farbleiste auf GeoPandas zu erstellen.Colorbar auf Geopandas

import geopandas as gp 
import pandas as pd 
import matplotlib.pyplot as plt 

#Import csv data 
df = df.from_csv('data.csv') 

#Convert Pandas DataFrame to GeoPandas DataFrame 
g_df = g.GeoDataFrame(df) 

#Plot 
plt.figure(figsize=(15,15)) 
g_plot = g_df.plot(column='column_name',colormap='hot',alpha=0.08) 
plt.colorbar(g_plot) 

bekomme ich folgende Fehlermeldung:

AttributeError       Traceback (most recent call last) 
<ipython-input-55-5f33ecf73ac9> in <module>() 
     2 plt.figure(figsize=(15,15)) 
     3 g_plot = g_df.plot(column = 'column_name', colormap='hot', alpha=0.08) 
----> 4 plt.colorbar(g_plot) 

... 

AttributeError: 'AxesSubplot' object has no attribute 'autoscale_None' 

Ich bin nicht sicher, wie colorbar Arbeit zu bekommen.

+1

GeoDataFrame gibt ein matplotlib 'Axes' Objekt zurück. 'plt.colorbar' benötigt ein abbildbares Objekt (ein' Axes' ist kein abbildbares Objekt). – tom

Antwort

10

Es gibt eine PR dies zu geoapandas hinzufügen (https://github.com/geopandas/geopandas/pull/172), aber jetzt können Sie es sich mit dieser Abhilfe hinzufügen:

## make up some random data 
df = pd.DataFrame(np.random.randn(20,3), columns=['x', 'y', 'val']) 
df['geometry'] = df.apply(lambda row: shapely.geometry.Point(row.x, row.y), axis=1) 
gdf = gpd.GeoDataFrame(df) 

## the plotting 

vmin, vmax = -1, 1 

ax = gdf.plot(column='val', colormap='hot', 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='hot', norm=plt.Normalize(vmin=vmin, vmax=vmax)) 
# fake up the array of the scalar mappable. Urgh... 
sm._A = [] 
fig.colorbar(sm, cax=cax) 

Die Abhilfe kommt von Matplotlib - add colorbar to a sequence of line plots. Und der Grund, dass Sie vmin und vmax selbst liefern müssen, ist, weil die Farbleiste nicht basierend auf den Daten selbst hinzugefügt wird, daher müssen Sie angeben, was die Verbindung zwischen Werten und Farbe sein soll.