如何使用 set_radius 设置 Matplotlib RadioButton 半径?

How to set Matplotlib RadioButton radius using set_radius?

我尝试设置 RadioButtons 的圆半径。根据下面的 MWE,按钮消失了。但是,删除 circ.set_radius(10) 会恢复按钮。使用 circ.heightcirc.width 恢复按钮,如果操作正确,它们是完美的圆形。知道是什么导致无法使用 set_radius 吗?

import matplotlib.pyplot as plt
from matplotlib.widgets import RadioButtons

buttonlist = ('at current position', 'over width around cur. pos.', 'at plots full range')

axradio = plt.axes([0.3, 0.3, 0.2, 0.2])
radios = RadioButtons(axradio, buttonlist)

for circ in radios.circles:
    circ.set_radius(10)

plt.show()

补充一下:我在 Windows 上使用 Python 3.6.8(32 位版本)。 Matplotlib 3.3.2.

一些评论。 如果您创建新轴,则 x 和 y 的默认限制为 (0, 1)。 所以如果你创建一个半径=10的圆,你就是看不到这个圆。 尝试将半径设置为较小的值(即0.1

另一件事是,大多数时候 aspect ratio 的 x 轴和 y 轴不相等,这意味着圆看起来像椭圆。 您在这里有不同的选择,一种是使用关键字 aspect='equal'aspect=1

import matplotlib.pyplot as plt
from matplotlib.widgets import RadioButtons

buttonlist = ('at current position', 'over width around cur. pos.', 'at plots full range')
axradio = plt.axes([0.3, 0.3, 0.6, 0.2], aspect=1)
radios = RadioButtons(axradio, buttonlist)

另一种选择是使用 this 答案并获取轴的纵横比。有了它,您可以像以前一样调整宽度和高度,但这样就不太可能猜测正确的比例是多少。这种方法的优点是,在轴的宽度和高度方面更加灵活,.

def get_aspect_ratio(ax=None):
    """
    if ax is None:
        ax = plt.gca()
    fig = ax.get_figure()

    ll, ur = ax.get_position() * fig.get_size_inches()
    width, height = ur - ll
    return height / width

plt.figure()
axradio = plt.axes([0.3, 0.3, 0.6, 0.2])
radios = RadioButtons(axradio, buttonlist)

r = 0.2
for circ in radios.circles:
    circ.width = r * get_aspect_ratio(axradio)
    circ.height = r