将全局设置应用于pyplot中的所有子图

时间:2017-01-30 21:38:18

标签: python matplotlib

这与thisthis问题有关。

我有一系列数字和子图,它们具有非常相似的设置。但是,我似乎无法找到一种方法同时设置它们。这是一个简化版本(我通常使用更多实例):

fspec = plt.figure(1)
spC = fspec.add_subplot(211)
spC.set_title('Surface concentrations')
spC.grid(True)
spC.set_ylim(1e-3, None)
spT = fspec.add_subplot(212, sharex=spC)
spT.set_title('Surface temperature')
spT.grid(True)
spT.set_ylim(1e-3, None)

fener = plt.figure(2)
enC = fener.add_subplot(211)
enC.set_title('Surface concentrations')
enC.grid(True)
enC.set_ylim(1e-3, None)
enT = fener.add_subplot(212, sharex=enC)
enT.set_title('Surface temperature')
enT.grid(True)
enT.set_ylim(1e-3, None)

我觉得应该有一种方法可以在每个子图中打开一个东西,或者至少在图中的每个子图中都应用。像

这样的东西
fspec.set_global_grid(True)
fspec.set_global_ylim(1e-3, None)

但是我找不到它。

我看了一下之前的一些但是它们似乎都不适合我,因为我一次不使用一个图形或轴,我同时使用它们。

干杯。

1 个答案:

答案 0 :(得分:2)

可以使用matplotlib rc parameters全局设置一些主要涉及图形样式的设置。 例如,在整个脚本中设置网格,放

plt.rcParams['axes.grid'] = True

在文件的开头(导入后)。

轴限制之类的其他东西确实特定于绘图本身,并且没有全局参数。但是你仍然可以按照链接问题中的描述进行操作,即编写自己的函数来完成你需要的大部分工作。

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['axes.grid'] = True

def plotfunction(fig, x1, y1, x2, y2,
                 title1 = 'Surface concentrations',
                 title2 = 'Surface temperature', **kwargs ):
    ax = fig.add_subplot(211)
    ax2 = fig.add_subplot(212, sharex=ax)
    ax.set_title(title1)
    ax2.set_title(title2)
    ax.set_ylim(1e-3, None)
    ax2.set_ylim(1e-3, None)
    ax.plot(x1, y1, **kwargs)
    ax2.plot(x2, y2, **kwargs)


fspec = plt.figure(1)
fener = plt.figure(2)

x1, y1, x2, y2 = np.loadtxt("spectrum.txt", unpack=True)
plotfunction(fspec,x1, y1, x2, y2)

x1, y1, x2, y2 = np.loadtxt("energy.txt", unpack=True)
plotfunction(fener,x1, y1, x2, y2, linewidth=3)