Geopandas 上的颜色条
Colorbar on Geopandas
我正在尝试在 GeoPandas 上创建一个 Matplotlib 颜色条。
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'
我不确定如何让颜色条工作。
编辑: 下面引用的 PR 已合并到 geopandas master 中。现在你可以简单地做:
gdf.plot(column='val', cmap='hot', legend=True)
颜色栏会自动添加。
备注:
legend=True
告诉 Geopandas 添加颜色条。
colormap
现在称为 cmap
。
vmin
和 vmax
不再需要。
有关更多信息,请参阅 https://geopandas.readthedocs.io/en/latest/mapping.html#creating-a-legend(举例说明如何调整颜色栏的大小和位置)。
有一个 PR 可以将其添加到 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。而你必须自己提供 vmin
和 vmax
的原因是因为颜色条不是根据数据本身添加的,因此你必须指示值和颜色之间的 link 应该是什么是。
我正在尝试在 GeoPandas 上创建一个 Matplotlib 颜色条。
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'
我不确定如何让颜色条工作。
编辑: 下面引用的 PR 已合并到 geopandas master 中。现在你可以简单地做:
gdf.plot(column='val', cmap='hot', legend=True)
颜色栏会自动添加。
备注:
legend=True
告诉 Geopandas 添加颜色条。colormap
现在称为cmap
。vmin
和vmax
不再需要。
有关更多信息,请参阅 https://geopandas.readthedocs.io/en/latest/mapping.html#creating-a-legend(举例说明如何调整颜色栏的大小和位置)。
有一个 PR 可以将其添加到 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。而你必须自己提供 vmin
和 vmax
的原因是因为颜色条不是根据数据本身添加的,因此你必须指示值和颜色之间的 link 应该是什么是。