使用 python 中的 windrose 模块绘制带有风玫瑰的不同子图。在 matplotlib 中使用睡眠

Posted

技术标签:

【中文标题】使用 python 中的 windrose 模块绘制带有风玫瑰的不同子图。在 matplotlib 中使用睡眠【英文标题】:plot different subplots with windroses using windrose module in python. Use sleep with matplotlib 【发布时间】:2016-09-25 17:03:31 【问题描述】:

我正在尝试使用 python 中的模块 windrose 在子图中绘制风玫瑰

https://pypi.python.org/pypi/windrose/

除了一些例子,没有太多的文档,所以我不知道如何用它来绘制不同的风玫瑰子图

我的尝试很总结:

import pandas as pd
import matplotlib.pyplot as plt
from windrose import WindroseAxes
import matplotlib.cm as cm
from time import sleep

v=df.speed
d=df.direction
f = Figure(figsize=(16,9), dpi=60) 
a = f.add_subplot(131)
ax = WindroseAxes.from_ax()
a.set_axes(ax)
ax.bar(d,v, normed= True,opening=0.8, edgecolor='white')
ax.set_legend()

然后b = f.add_subplot(132) …… 等等

我的第二个问题是,

一旦我生成了情节,我想用 time.sleep() 或类似的东西引入一个暂停

我尝试了一个简单的例子:

-I plot something 
-then export it to png format with f.savefig()
-then I introduce sleep(20)
-then the code continues

但是虽然导出了正确的 png 并没有显示在屏幕上,代码还在继续。因为它不会引发任何错误,我想我应该在 sleep() 之前或之后添加一些东西

【问题讨论】:

请分别提出两个问题。 【参考方案1】:

第一个问题:您不能将另一个figure 放在现有的figure 上作为subplot(不幸的是WindroseAxes.from_ax() 创建了一个新的figure 并且不会仅更改axis 实例)。

如果你写

fig = plt.figure(figsize=(16,9), dpi=60) 
wax = WindroseAxes.from_ax(fig=fig)
ax1 = fig.add_subplot(221)
wax.contourf(wd, ws, bins=np.arange(0, 8, 1), cmap=cm.hot)
wax.set_legend()
ax2 = fig.add_subplot(222)
ax2.plot([1,2,3,4], [1,4,9,16], 'k-')
ax3 = fig.add_subplot(223)
ax3.plot([1,2,3,4], [1,10,100,1000], 'b-')
ax4 = fig.add_subplot(224)
ax4.plot([1,2,3,4], [0,0,1,1], 'g-')

你会得到这样的东西:

第二个问题:要重绘你的情节,你需要在改变情节后添加plt.draw()。 但是如果你只想制作一组图像,每次需要时都调用savefig,而不需要plt.show()

【讨论】:

以上是关于使用 python 中的 windrose 模块绘制带有风玫瑰的不同子图。在 matplotlib 中使用睡眠的主要内容,如果未能解决你的问题,请参考以下文章

Python Windrose 挂起大型数据集,不会崩溃或产生结果

R:使用来自openair包的windRose的多个windrose图

python气象绘图windrose

数据可视化应用绘制风玫瑰图(附Python代码)

使用 windrose 轴控制多个子图的图例

如何使用 python 的 matplotlib 重绘图像?