0

我正在尝试使用 matplotlib 和pyshp查看从 Shapefile 读取的基本多边形 但我所有的努力只产生了一个没有多边形的空轴。以下是我的一些尝试,使用显示比利时边界的数据集:

import shapefile as sf
r = sf.Reader("BEL_adm/BEL_adm0")
p=r.shapes()
b=p[0]
points = b.points

import matplotlib.pyplot as plt
from matplotlib.path import Path
imporst matplotlib.patches as patches

verts = points

verts = []
for x,y in points:
    verts.append(tuple([x,y]))

codes = ['']*len(verts)
codes[0] = Path.MOVETO
codes[-1] = Path.CLOSEPOLY

for i in range(1,len(verts)):
    codes[i]=Path.LINETO

path = Path(verts, codes)
fig = plt.figure()
ax = fig.add_subplot(111)
patch = patches.PathPatch(path, facecolor='orange', lw=2)
ax.add_patch(patch)
ax.set_xlim(-2,2)
ax.set_ylim(-2,2)
plt.show()

另一个使用补丁的尝试也会产生一个空帧:

fig = plt.figure(figsize=(11.7,8.3))

ax = plt.subplot(111)
x,y=zip(*b.points)
import matplotlib.patches as patches
import matplotlib.pyplot as plt
bol=patches.Polygon(b.points,True, transform=ax.transAxes)

ax.add_patch(bol)
ax.set_ylim(0,60)
ax.set_xlim(0,200)
plt.show()

很高兴看到我错过了什么。
谢谢,奥兹

4

1 回答 1

1

而不是调用set_xlim(), set_ylim()来设置轴的范围,您可以使用ax.autoscale().

对于您的 Polygon 版本,您不需要将 transform 参数设置为 ax.transAxes,只需调用:

bol=patches.Polygon(b.points,True)
于 2012-06-04T00:51:09.867 回答