我正在为一个研究项目绘制一些天气数据。该图包括18个时间步。我决定完成此操作的最佳方法是为每个时间步创建一个新图,将其保存为一个文件,并为下一个时间步创建一个新图(使用for循环)。
例如:
map_init #[Basemap Instance]
extra_shapes #[Basemap.readshapefile object]
for i in range(timesteps):
#plot the weather data for current timestep to current plot
map_init.imshow(data[i])
# extra_shapes are county boundaries. Plot those as polygons
pyplot.Polygon(map_init.extra_shapes[i])
# Plot the state boundaries (in basemap)
map_init.drawstates()
# add a colorbar
pyplot.colorbar()
# Save the figure
pyplot.savefig(filepath)
#close figure and loop again (if necessary)
pyplot.clf()
问题在于
pyplot.clf()
该代码工作正常,只有一件事。只有第一个情节出人意料。随后的每个情节都缺少
extra_shapes
(即没有县边界)。我不了解pyplot.clf()
的存在与pyplot.Polygon()
的失败之间的关系?如果删除,将绘制
extra_shapes
,但是每个图都有多个颜色条(取决于i
的值)。 pyplot.clf()
的唯一原因是要避免在最终图中使用18个颜色条。有没有一种方法可以强制每个图只有一个色标? 最佳答案
尝试制作一个新图形,而不是使用clf()。
例如
for i in range(timesteps):
fig = pyplot.figure()
...
fig.savefig(filepath)
另外(更快),您可以更新图像对象中的数据
(由imshow()返回)。
例如像(完全未经测试):
map_init #[Basemap Instance]
extra_shapes #[Basemap.readshapefile object]
#plot the weather data for current timestep to current plot
img = map_init.imshow(data[0])
# extra_shapes are county boundaries. Plot those as polygons
plygn = pyplot.Polygon(map_init.extra_shapes[0])
# Plot the state boundaries (in basemap)
map_init.drawstates()
# add a colorbar
pyplot.colorbar()
for i in range(timestamps):
img.set_data(data[i])
plygn.set_xy(map_init.extra_shapes[i])
pyplot.draw()
pyplot.savefig(filepath)
但是,该方法可能无法与底图很好地配合使用。我可能还不太记得重新绘制图形的正确方法,但是我很确定它只是plt.draw()...
希望无论如何会有所帮助
编辑:刚注意到,您也在循环内绘制多边形。更新了第二个示例以正确反映这一点。
关于python - 循环绘制(使用 basemap 和pyplot)…pyplot.clf()有问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3460707/