Python和科学计算认证群组  - 讨论区

标题:如何画出 Wind rose plot

2012年05月04日 星期五 00:09

如何用 windrose 画出 风速和风方向的 分布图。

具体图形如下所示

2012年05月04日 星期五 06:22

http://matplotlib.sourceforge.net/examples/pylab_examples/polar_bar.html

2012年05月04日 星期五 18:30

自己写程序画可能还是比较麻烦,你搜索windrose matplotlib试试看吧。我搜索到一个网站:

http://youarealegend.blogspot.jp/2008/09/windrose.html

2012年05月04日 星期五 20:08

坦白说发帖之前我都搜索到了以上你给的例子,对于菜鸟级的python使用者我来说第一次接触windrose这类图形疑问多多。

2012年05月04日 星期五 20:23

那你先把你搜索到的内容,和已经做出的效果贴出来,包括数据和程序,然后说说还有哪些需要改进。这样我才好在你已经做出来的基础之上修改。

我看上面的那个链接中的图已经和你给的那个图很接近了啊。

2012年05月05日 星期六 01:16

以上代码得到的结果图如下所示:

请斑竹帮忙修改成1楼那样的 colorbar 风速 和 半径以百分比显示。

而且左下角label中的最后一个 [6.9:l] 其中的 l 本来应该是无穷大的意思,给出的结果为什么看似 ‘一’ 似的。 

2012年05月05日 星期六 07:19

由于我不是你这个专业的,我还没有看懂这个风速图要表达的意思。我把legend改为colorbar了,你可以参考一下:

http://hyry.dip.jp/tech/forum/thread.html/62

2012年05月05日 星期六 23:16

另外请教: 画windrose图形时 ax.bar(wd, ws, normed=True, opening=0.8, edgecolor='white')

显然要求wd 和 ws 数据长度一样, 如果wd中有部分数据点丢失,原始保存的结果为了保持和ws一样的长度和对应,以 -- 代替丢失的数据点, 那么导入数据的时候,只能用:

np.loadtxt('wd.txt',dtype=np.object)

np.loadtxt('ws.txt')

下面该如何转换后才能 ax.bar(wd, ws) 画图 ?

 

 

2012年05月06日 星期日 06:17

试试:

mask = wd!="--"

wd = wd[mask].astype(np.float)

ws = ws[mask]

2012年05月06日 星期日 15:27

7楼图中左下角label中的最后一个 [6.9:l] 其中的 l 本来应该是无穷大的意思,给出的结果为什么看似 ‘1’ 啊?

2012年05月06日 星期日 16:08

无穷大显示为1是程序的BUG吧。你修改一下:

labels = ["[%.1f : %0.1f[" %(labels[i], labels[i+1])

就好了。

2012年05月06日 星期日 20:12

        def get_labels():

            labels = np.copy(self._info['bins'])

            labels = ["[%.1f : %.1f]" %(labels[i], labels[i+1]) \

                      for i in range(len(labels)-1)]

            return labels

labels定义看不出错误,不知你说的BUG是什么意思?能否详细点?

2012年05月06日 星期日 20:18

就是无穷大被转换成"1"的BUG。

你试试下面的语句就知道了:

"%.1f" % float("inf")

所以这个程序要修改,改为判断是否为无穷大,如果无穷大就用别方法显示,例如latex中的无穷大符号。

2012年05月06日 星期日 22:37

有关你在10楼给我9楼问题的解答:

mask = wd!="--"

wd = wd[mask].astype(np.float)

ws = ws[mask]

这样处理实际上是把 ws 中部分数据(对于wd中 ‘--’ 的 数据)一起丢弃了吧?

我在想十分有其他方法 不丢弃 ws 中的数据?

2014年04月08日 星期二 12:10

新手请教:

运行例子程序example.py,报错

 File "C:\Python27\plotWindRose.py", line 314, in set_legend

    l = ax.legend(axespad=-0.10)

File "C:\Python27\plotWindRose.py", line 111, in legend

    self.legend_ = matplotlib.legend.Legend(self, handles, labels, loc, **kwargs)

TypeError: __init__() got an unexpected keyword argument 'axespad'

 

注释掉相关行,可运行并输出结果。但是,仍有问题: 1)legend因此不能显示; 2)box或bar图边缘为直线,不如弧线好看

python新手, 不知道该如何改动,请高手帮忙解答,先谢过

2014年04月08日 星期二 12:24

参考张若愚老师的改动

得到下图

新问题是如何,加入中心静风区(Calm),并显示静风比例%和其他风速比例%

2014年05月06日 星期二 07:39

请教你那个半径值 1.6, 3.2, 4.7, 6.3, 7.8 代表百分比还是随机设定的?

2014年05月06日 星期二 08:09

半径是风速不是百分比,应该是根据风速统计出来之后,根据画图需要自动计算的

2014年05月29日 星期四 17:15

你是把风速和风向整和到一个windrose中了,请教如果实现这个风速统计并且以半径值 1.6, 3.2, 4.7, 6.3, 7.8表示?感谢

2014年05月30日 星期五 05:19

上面你找到的python程序解决的就是你的问题,研究一下程序本身吧

大致是360度分为X等分,在每个方向等分上给出Y个等分风速范围,分别统计在X方向Y风速范围上出现频次,然后画图,具体画图如何实现没有具体研究,在我想象中,按每个X,Y等分上统计频次计算色块大小

另外windrose原本就是表达风向和风速两者合成的统计信息的

2014年07月04日 星期五 13:32

还是不明白如何根据"%.1f" % float("inf"),修改labels = ["[%.1f : %0.1f[" %(labels[i], labels[i+1])?

labels = ["["%.1f" % float("inf")[" %(labels[i], labels[i+1])?

试了几次,都没通过,能把你修改的这条代码发上来看看吗?

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号