matplotlib 风玫瑰axespad含义

ca1c2owp  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(129)

我是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 变量在这段代码中的作用。任何建议都会有所帮助!

i5desfxk

i5desfxk1#

尝试更改此行:

l = ax.legend(axespad=-0.10)

更改为:

l = ax.legend(borderaxespad=-0.10)

一些背景:
我的好奇心被激发了,我决定去冒险一试。
根据matplotlib documentationaxespad不是legend函数的有效参数,但borderaxespad是。我还注意到您链接到的文章使用的是matplotlib 0.98.3,这是一个 * 非常 * 过时的版本(事实上,它的文档不再可用)。
根据我的直觉,我从here下载了旧的源代码,从here下载了新的源代码,并对两者进行了比较。
结果发现matplotlib 0.98.3只引用了axespadmatplotlib 1.4.2只引用了borderaxespad。它们的代码几乎完全相同。看起来他们在某个时候为Legend添加了边框功能,并决定相应地重命名参数。

相关问题