[英]How to store the output of a function
我有一个 dataframe 如下: x = [1,2,3.....10000] y = [1,2,3.....10000]
我在 matplotlib 中使用 SpanSelector 工具对 x 数据进行选择。 根据选择,我得到两个值 (xmin, xmax)
现在我想要 plot 另一个 plot(与我已经绘制的不同),x 轴设置为 (xmin, xmax)
`
ax.errorbar(x=x,y=y,yerr=y_err)
def onselect(xmin, xmax):
print('\nLower value: ',xmin)
print('Upper value: ',xmax)
return xmin,xmax
span = SpanSelector(
ax,
onselect,
"horizontal",
useblit=True,
props=dict(alpha=0.5, facecolor="tab:green"),
interactive=True,
drag_from_anywhere=True
)
`
我尝试在函数内部使用 plt 命令,它打印给定的打印语句,但不打印。
我基本上想要这个: https://matplotlib.org/stable/gallery/widgets/span_selector.html用于我自己的用例,我无法做到。 执行相同操作的任何其他方法也足够了。
问题是您传递给 SpanSelector 的SpanSelector
是作为回调实现的,其中不使用返回值。 因此,您必须为这个 function 找到一种方法,将值永久存储在某个地方(超出函数的生命周期/ scope)而不返回它。 实际上有两种方法:要么,您使用全局变量并让 function 写入它们。 这看起来像这样:
xmin_global = None
xmax_global = None
def onselect(xmin, xmax):
global xmin_global
global xmax_global
xmin_global = xmin
xmax_global = xmax
然而,通常不鼓励使用全局变量,因为很难跟踪行为,而且代码库越大,理解代码的作用和调试它就变得非常复杂。 然而,对于小型独立代码片段,通常可以使用它。
另一种(在我看来更好)的方法是将onselect
定义为 object 的一种方法,它将变量xmin
和xmax
作为成员属性。 然后该方法可以将 object 的这些属性设置为您的值,然后您可以从 object 检索它们。这可能看起来像这样:
class Selector:
def __init__(self, ax):
self.ax = ax
self.xmin = None
self.xmax = None
self.span = SpanSelector(
self.ax,
self.onselect,
"horizontal",
useblit=True,
props=dict(alpha=0.5, facecolor="tab:blue"),
interactive=True,
drag_from_anywhere=True
)
def onselect(self, xmin, xmax):
self.xmin = xmin
self.xmax = xmax
selector = Selector(ax1)
在这里,我也在__init__
方法中的 class 内部初始化了SpanSelector
。 但这也可以在 class 之外完成。要点是onselect
作为一种方法可以访问 object 的所有属性,并且可以通过self
引用写入它们。 可以将它们视为 class 的 scope 中的全局变量。稍后您可以使用selector.xmin
和selector.xmax
访问它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.