2016-03-15 5 views
5

Я пытаюсь создать цветную панель Matplotlib на GeoPandas.Colorbar on 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) 

Я получаю следующее сообщение об ошибке:

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' 

Я не уверен, как получить Colorbar работать.

+1

GeoDataFrame возвращает объект matplotlib 'Axes'. 'plt.colorbar' требует отображаемого объекта (' Axes' не является отображаемым объектом). – tom

ответ

10

Существует пиар, чтобы добавить это geoapandas (https://github.com/geopandas/geopandas/pull/172), но на данный момент, вы можете добавить его самостоятельно с этим обходным путем:

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

Обходными происходят от Matplotlib - add colorbar to a sequence of line plots. И причина, по которой вы должны поставить и vmax, заключается в том, что цветная панель не добавляется на основе самих данных, поэтому вы должны указать, какая должна быть связь между значениями и цветом.