我正在为研究项目绘制一些天气数据。该图包含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个颜色条。有没有办法强制每个情节只有一个颜色条?
答案 0 :(得分:3)
尝试制作新图而不是使用clf()。
e.g。
for i in range(timesteps):
fig = pyplot.figure()
...
fig.savefig(filepath)
或者(并且更快)您可以更新图像对象中的数据 (由imshow()返回。)
e.g。像(完全未经测试的):
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)
但是,该方法可能无法与basemap一起使用。我也可能错误地记下重绘图的正确方法,但我很确定它只是plt.draw()...
希望无论如何都有所帮助
编辑:刚刚注意到你正在循环中绘制多边形。更新了第二个示例以正确反映该内容。