我一直在使用一个shapefile,它具有几个建筑物顶点的x和y坐标,我使用Matplotlib将它们绘制为多边形。但是,我想根据每个建筑物的楼层数量,用红色/灰色/或任何其他颜色填充这些多边形。例如,最小楼层数为零,因此所有楼层为零的建筑物颜色都非常浅。另一方面,最大楼层数为100,所以所有楼层都有100个楼层,非常暗,而且在0到100之间,随着楼层数量的增加,多边形会越来越暗。
我在网上发现了一些东西,但没有具体解决这个问题。我是Python的新手,所以也许我只是不知道能够做我需要的合适的库。
我现在的代码是:(它只绘制多边形,没有填充)
import shapefile
import matplotlib.pyplot as plt
import numpy as np
i = 0
sf = shapefile.Reader('shapefile')
sr = sf.shapeRecords()
max = 10
while i < max:
sr_obj = sr[i]
sr_points = np.array(sr_obj.shape.points)
records = sf.record(i)
numfloors = records[42]
x = sr_points[:,0]
y = sr_points[:,1]
sr_plot = zip(*sr_points)
plt.plot(*sr_plot)
i = i + 1
plt.show()
谢谢!
答案 0 :(得分:9)
您可以使用PatchCollection
执行此操作,并使用cmap
根据楼层数设置颜色。
例如:
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
from matplotlib.patches import Polygon
import numpy as np
fig,ax = plt.subplots(1)
N = 10
nfloors = np.random.rand(N) # some random data
patches = []
cmap = plt.get_cmap('RdYlBu')
colors = cmap(nfloors) # convert nfloors to colors that we can use later
for i in range(N):
verts = np.random.rand(3,2)+i # random triangles, plus i to offset them
polygon = Polygon(verts,closed=True)
patches.append(polygon)
collection = PatchCollection(patches)
ax.add_collection(collection)
collection.set_color(colors)
ax.autoscale_view()
plt.show()
答案 1 :(得分:1)
Matplotlib能够绘制包含polygons的任意形状。
from matplotlib.patches import Polygon
import matplotlib.pyplot as plt
plt.figure()
axes = plt.gca()
axes.add_patch(Polygon([(0, 0), (1, 0.2), (0.3, 0.4), (0.2, 1)],
closed=True, facecolor='red'))
添加任意数量的内容。