在功能中更改打印样式表

时间:2016-11-03 11:33:07

标签: python matplotlib plot

我使用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()

1 个答案:

答案 0 :(得分:3)

您可以在函数中使用temporary styling

with plt.style.context(('ggplot')):
    ax.scatter(xd, yd)

这不会改变轴的线宽,因为它只将样式应用于块内的样式。要设置轴的样式(例如线宽),您需要在use调用之前subplots样式表(如在第一个示例中所做的那样),或者以临时样式包装它。

据我所知,样式表不能追溯性地应用于已经创建的对象。为此,您需要遍历要更改的属性并明确设置它们。