2016-03-15 24 views
5

GeoPandas'ta bir Matplotlib colorbar oluşturmaya çalışıyorum.Geopandalarda Colorbar

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' 

Ben Colorbar işe nasıl emin değilim:

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) 

aşağıdaki hatayı alıyorum.

+1

GeoDataFrame, bir matplotlib 'Axes' nesnesini döndürür. "plt.colorbar", eşlenebilen bir nesne gerektirir ("Eksenler, eşlenebilen bir nesne değildir). – tom

cevap

10

geoapandas (https://github.com/geopandas/geopandas/pull/172) için eklemek üzere bir halkla ilişkiler vardır, ama şimdilik, bu geçici çözüm kendiniz ekleyebilirsiniz:

## 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) 

geçici çözüm Matplotlib - add colorbar to a sequence of line plots geliyor. Ve vmin ve vmax tedarik etmek zorunda olmanızın nedeni, colorbar'ın verilere bağlı olarak eklenmemesidir, bu nedenle değerler ve renk arasındaki bağlantının ne olması gerektiğine dair talimat vermeniz gerekir.

İlgili konular