在 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.namem.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 的底图填充不同颜色的每个邮政编码的主要内容,如果未能解决你的问题,请参考以下文章

matplotli画预测框以及打标签

在 Ubuntu 18.04 Jetson 中为 cv_bridge 链接 opencv 3.2

在 Rails 3.2 中为 Twitter Bootstrap 的“bootstrap-popover.js”设计“popovers”样式

Python日记——matplotlib基础入门

用Python玩转词云

Python学习