在 Python 3.2 中为 Matplotlib 的底图填充不同颜色的每个邮政编码
Posted
技术标签:
【中文标题】在 Python 3.2 中为 Matplotlib 的底图填充不同颜色的每个邮政编码【英文标题】:fill in each zip-code with a different color for basemap of Matplotlib in Python 3.2 【发布时间】:2015-04-24 04:45:06 【问题描述】:我正在使用 Python 3.2 为 Matplotlib 底图中的邮政编码多边形着色。
我需要用不同的颜色填写每个邮政编码。
邮政编码信息来自 shapefile。
我无法在以下位置找到解决方案: http://matplotlib.org/basemap/api/basemap_api.html
任何帮助将不胜感激。
谢谢
【问题讨论】:
请发布您用于绘制地图的代码。 Fill countries in python basemap的可能重复 【参考方案1】:Basemap 有一种非常方便的方式来读取 shapefile。
m = Basemap()
m.readshapefile('file_without_extension', 'name')
然后您可以使用m.name
和m.name_info
访问有关shapefile 的信息。
然后创建要用于颜色信息的数据框。
import pandas as pd
import numpy as np
from matplotlib.patches import Polygon
zipdf = pd.DataFrame(
'shapes': [Polygon(np.array(shape), True) for shape in m.name],
'zip': [area['zip'] for area in m.name_info]
)
如果您想包含 shapefile 中未包含的着色信息,请将其他信息与您刚刚创建的 DataFrame 合并。
zipdf = zipdf.merge(other_df, how='right', on='zip')
现在,为了实际为地图着色,我使用了一个颜色图,它采用邮政编码中的租金价格值,所以我将展示它。
from matplotlib.collections import PatchCollection
import matplotlib.cm as cm
import matplotlib.colors as colors
fig = plt.figure()
ax = fig.add_subplot(111)
cmap = plt.get_cmap('viridis')
pc = PatchCollection(zipdf['shapes'], zorder=2)
norm = colors.Normalize()
pc.set_facecolor(cmap(norm(zipdf['price'].values)))
ax.add_collection(pc)
cmapper = cm.ScalarMappable(norm=norm, cmap=cmap)
cmapper.set_array(zipdf['price'])
plt.colorbar(cmapper)
plt.show()
有关这方面的更多信息,请查看来自 Data Dependence 的 Creating Attractive and Informative Map Visualisations in Python with Basemap。
【讨论】:
【参考方案2】:作为上述答案的补充,您可以为我们的邮政编码here找到上述“无扩展名文件”
【讨论】:
以上是关于在 Python 3.2 中为 Matplotlib 的底图填充不同颜色的每个邮政编码的主要内容,如果未能解决你的问题,请参考以下文章
在 Ubuntu 18.04 Jetson 中为 cv_bridge 链接 opencv 3.2
在 Rails 3.2 中为 Twitter Bootstrap 的“bootstrap-popover.js”设计“popovers”样式