4

我是 Python 新手,正在尝试使用windrose.py以下网站上的代码创建风玫瑰:http: //sourceforge.net/projects/windrose/

以下是我正在运行的代码,我在以下网站找到了示例代码:http: //youarealegend.blogspot.com/search/label/windrose

import numpy

from windrose import WindroseAxes
from matplotlib import pyplot as plt
import matplotlib.cm as cm
from numpy.random import random
from numpy import arange 
import windrose as wr


import matplotlib.pyplot as mp
import windrose

#Create wind speed and direction variables
ws = random(500)*6
wd = random(500)*360


#A quick way to create new windrose axes...
def new_axes():
  fig = plt.figure(figsize=(8, 8), dpi=80, facecolor='w', edgecolor='w')
  rect = [0.1, 0.1, 0.8, 0.8]
  ax = WindroseAxes(fig, rect, axisbg='w')
  fig.add_axes(ax)
return ax

#...and adjust the legend box
def set_legend(ax):
  l = ax.legend(axespad=-0.10)
  plt.setp(l.get_texts(), fontsize=8)

wr.wrcontourf(wd, ws)

当我运行此代码时,我收到以下错误:

RuntimeWarning: invalid value encountered in rint
  return round(decimals, out)

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

虽然我已经尝试了很多事情,但我无法弄清楚axespad变量在这段代码中做了什么。任何建议都会有所帮助!

4

1 回答 1

6

尝试更改此行:

l = ax.legend(axespad=-0.10)

对此:

l = ax.legend(borderaxespad=-0.10)

一些背景:

好奇心被激起,我决定进行一次冒险。

根据matplotlib 文档axespad不是该legend函数的有效参数,而是borderaxespad。我还注意到您链接到的文章正在使用matplotlib 0.98.3,这是一个非常过时的版本(事实上,文档不再可用)。

根据我的预感,我从这里下载了旧源,从这里下载了新源,并比较了两者。

原来matplotlib 0.98.3只有对 的引用axespad并且matplotlib 1.4.2只有对 的引用borderaxespad。它们所在的代码几乎完全相同。看起来他们在某个时候为Legends 添加了边框功能并决定相应地重命名参数。

于 2014-12-12T20:53:02.010 回答