seaborn 如何通过导入包来改变 pyplot 的行为?
how seaborn changes the behavior of pyplot by just importing the package?
我很好奇seaborn是如何通过import seaborn as sns
改变matplotlib函数的行为的。
我想实现相同的功能来改变 pyplot 中 imshow() 函数的行为,例如,我想显示图形左下角的像素值。
当然可以重新定义 imshow() 函数,并导入重新定义的函数,但问题是我有多个脚本以许多不同的方式调用 imshow() ,例如 plt.imshow()
、imshow()
,以及 OOP 风格 axes.imshow()
。有没有像 seaborn 那样简单的方法来做到这一点?
如果我有时间的话,阅读 seaborn 的源代码当然会给我一些线索......
您可以在 python
中覆盖您想要的任何内容
my_pyplot.py
import matplotlib as mpl
def myPyPlot(*args,**kwargs):
print "You Said:",args,kwargs
mpl.pyplot = myPyPlot
main.py
import my_pyplot as mpp
from matplotlib import pyplot
print pyplot("arg1","arg2",axes="yellow")
请注意,在导入修改后的内容之前,您需要先导入您的内容
Seaborn 不会按照您描述的方式更改 matplotlib 函数的行为。 Matplotlib exposes 一些自定义选项,通过更改各种绘图参数的默认值来生效。导入 seaborn 时,它会运行一些使用此功能更改全局默认值的代码。
更改默认参数值和更改函数行为之间存在重要区别。你提出的是后者,它有时被称为monkey patching。这是可能的,但它与 seaborn 正在做的不同,而且我不会在任何类型的生产环境中推荐它。
我很好奇seaborn是如何通过import seaborn as sns
改变matplotlib函数的行为的。
我想实现相同的功能来改变 pyplot 中 imshow() 函数的行为,例如,我想显示图形左下角的像素值。
当然可以重新定义 imshow() 函数,并导入重新定义的函数,但问题是我有多个脚本以许多不同的方式调用 imshow() ,例如 plt.imshow()
、imshow()
,以及 OOP 风格 axes.imshow()
。有没有像 seaborn 那样简单的方法来做到这一点?
如果我有时间的话,阅读 seaborn 的源代码当然会给我一些线索......
您可以在 python
中覆盖您想要的任何内容my_pyplot.py
import matplotlib as mpl
def myPyPlot(*args,**kwargs):
print "You Said:",args,kwargs
mpl.pyplot = myPyPlot
main.py
import my_pyplot as mpp
from matplotlib import pyplot
print pyplot("arg1","arg2",axes="yellow")
请注意,在导入修改后的内容之前,您需要先导入您的内容
Seaborn 不会按照您描述的方式更改 matplotlib 函数的行为。 Matplotlib exposes 一些自定义选项,通过更改各种绘图参数的默认值来生效。导入 seaborn 时,它会运行一些使用此功能更改全局默认值的代码。
更改默认参数值和更改函数行为之间存在重要区别。你提出的是后者,它有时被称为monkey patching。这是可能的,但它与 seaborn 正在做的不同,而且我不会在任何类型的生产环境中推荐它。