我是 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 变量在做什么。任何建议都会有所帮助!
最佳答案
尝试更改此行:
l = ax.legend(axespad=-0.10)
对此:
l = ax.legend(borderaxespad=-0.10)
一些背景:
带着好奇心,我决定去冒险。
根据 matplotlib documentation ,
axespad
不是 legend
函数的有效参数,但 borderaxespad
是。我还注意到您链接到的文章使用的是 matplotlib 0.98.3
,这是一个非常过时的版本(实际上,文档不再可用)。根据我的直觉,我从 here 下载了旧源代码,从 here 下载了新源代码,并比较了两者。
原来
matplotlib 0.98.3
只引用了 axespad
, matplotlib 1.4.2
只引用了 borderaxespad
。它们所在的代码几乎完全相同。看起来他们在某个时候向 Legend
s 添加了边框功能,并决定相应地重命名参数。关于python - Windrose 斧头的含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27451858/