gpt4 book ai didi

python - 循环绘图(使用 basemap 和 pyplot)....pyplot.clf() 的问题

转载 作者:行者123 更新时间:2023-11-30 23:57:52 28 4
gpt4 key购买 nike

我正在为一个研究项目绘制一些天气数据。该图由 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)

但是,该方法可能无法很好地与 basemap 配合使用。我也可能记错了重绘图形的正确方法,但我相当确定它只是 plt.draw()...

希望能有点帮助

编辑:刚刚注意到您也在循环内绘制多边形。更新了第二个示例以正确反射(reflect)这一点。

关于python - 循环绘图(使用 basemap 和 pyplot)....pyplot.clf() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3460707/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com