Python 在函数中更改打印样式表

Python 在函数中更改打印样式表,python,matplotlib,plot,Python,Matplotlib,Plot,我正在使用Matplotlib创建许多绘图函数(放在模块中)。不同的功能涉及不同类型的绘图,我希望根据绘图类型有不同的“样式表”(即线、标记、轴等的不同设置)。 但是,我在尝试从绘图函数中使用pyplot.style.use()函数设置预定义的Matplotlib样式时遇到了问题。在主脚本中设置它是可行的,但是我不能为不同的情节设置不同的样式 因此,这段代码设置了我想要的样式 # A plot function def my_plot(ax, xd, yd): '''Create a p

我正在使用Matplotlib创建许多绘图函数(放在模块中)。不同的功能涉及不同类型的绘图,我希望根据绘图类型有不同的“样式表”(即线、标记、轴等的不同设置)。 但是,我在尝试从绘图函数中使用pyplot.style.use()函数设置预定义的Matplotlib样式时遇到了问题。在主脚本中设置它是可行的,但是我不能为不同的情节设置不同的样式

因此,这段代码设置了我想要的样式

# A plot function
def my_plot(ax, xd, yd):
    '''Create a plot'''

    ax.scatter(xd, yd) 

# Main Script 
import numpy as np
import matplotlib.pyplot as plt 

# Set plot style sheet in main script
plt.style.use('ggplot')

fig, ax = plt.subplots(1)

x = np.arange(1, 101)
y = 20 + 3 * x + np.random.normal(0, 60, 100)

sc = my_plot(ax, x, y)

plt.show()
但是,下面的没有,尽管rc参数设置在函数调用后已经更改,所以从python中再次运行脚本会相应地更改图形的样式

# A plot function
def my_plot(ax, xd, yd):
    '''Create a plot'''

    # Set plot style sheet in function
    plt.style.use('ggplot')

    ax.scatter(xd, yd) 

# Main Script 
import numpy as np
import matplotlib.pyplot as plt 

fig, ax = plt.subplots(1)

x = np.arange(1, 101)
y = 20 + 3 * x + np.random.normal(0, 60, 100)

sc = my_plot(ax, x, y)

plt.show()
您可以在您的功能中使用:

with plt.style.context(('ggplot')):
    ax.scatter(xd, yd)
这不会更改轴的线宽,因为它仅将样式应用于块内的内容。要设置轴(例如线宽)的样式,您需要在调用
子绘图之前使用
样式表(如第一个示例中所做的),或者以临时样式包装该样式表

据我所知,样式表不能追溯应用于已创建的对象。要做到这一点,您需要循环您想要更改的属性,并显式地设置它们