我正在使用 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()
最佳答案
您可以使用temporary styling在您的职能范围内:
with plt.style.context(('ggplot')):
ax.scatter(xd, yd)
这不会改变轴的线宽,因为它仅将样式应用于 block 内的内容。要设置轴的样式(例如线宽),您需要在 subplots
调用之前使用
样式表(就像您在第一个示例中所做的那样),或者将其包装在临时文件中风格。
据我所知,样式表不能追溯应用于已经创建的对象。为此,您需要循环遍历要更改的属性并显式设置它们。
关于python - 更改函数内的绘图样式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40400449/