Я пытаюсь сделать карту Нидерландов, где провинции заполнены каким-нибудь цветом. Я искал этот пост и этот пост для получения справки и примеров кода. За исключением случаев, когда они используют
lines = LineCollection(shpsegs,antialiaseds=(1,))
lines.set_facecolors(cm.jet(np.random.rand(1)))
, чтобы заполнить фигуры заданным цветом, это ничего не делает для меня. Я не могу понять, почему он ничего не делает для меня. Это не дает мне ошибки, и я также не вижу цвета в форме.
Я был бы очень признателен за помощь. Мой (почти) весь код ниже, я обрезал некоторые ненужные биты:
import shapefile
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.collections import LineCollection
import numpy as np
##Importing shapefile and records
sf = shapefile.Reader("NLadmin/NLD_adm1")
records = sf.records()
for i in range(len(records)):
print(str(i) + " - " + str(records[i][4]))
shapes = sf.shapes()
for i in range(len(shapes)):
print(shapes[i].parts)
##Figure
fig = plt.figure()
ax = plt.axes()
ax.set_aspect(1.1541)
ax.set_xlim(3, 7.5)
ax.set_ylim(50.5, 54)
print("-------")
##Use the shapes and records
for shape, record in zip(list(sf.iterShapes()), records):
number_points = len(shape.points)
number_parts = len(shape.parts)
for index in range(number_parts):
startindex = shape.parts[index]
if index < len(shape.parts)-1:
endindex = shape.parts[index+1]
else:
endindex = number_points
shapesegment = shape.points[startindex:endindex]
x_lon = []
y_lat = []
for index in range(len(shapesegment)):
x_lon.append(shapesegment[index][0])
y_lat.append(shapesegment[index][1])
linelist = []
for i in range(len(x_lon)):
intermediatelist = []
try:
startxy = (x_lon[i], y_lat[i])
endxy = (x_lon[i+1], y_lat[i+1])
except:
continue
intermediatelist.append(startxy)
intermediatelist.append(endxy)
linelist.append(intermediatelist)
lines = LineCollection(linelist,antialiaseds=(1,))
lines.set_facecolors('#e41a1c')
lines.set_edgecolors('k')
lines.set_linewidth(1)
ax.add_collection(lines)
plt.show()