如何使用 set_radius 设置 Matplotlib RadioButton 半径?
How to set Matplotlib RadioButton radius using set_radius?
我尝试设置 RadioButtons 的圆半径。根据下面的 MWE,按钮消失了。但是,删除 circ.set_radius(10)
会恢复按钮。使用 circ.height
和 circ.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
我尝试设置 RadioButtons 的圆半径。根据下面的 MWE,按钮消失了。但是,删除 circ.set_radius(10)
会恢复按钮。使用 circ.height
和 circ.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