matplotlib中的子图创建一个循环

时间:2015-06-03 16:41:23

标签: python loops matplotlib subplot

我是python的新手,我正在尝试创建一系列子图,其中唯一的参数更改为每个图的fill_between参数。目前,我重复整个代码并更改每个子图的fill_between。是否有更有效的方法为子图创建循环,其中唯一改变的是fill_between?下面是我试图制作的图表类型的示例。

import numpy as np
import matplotlib.pyplot as plt
#data
data1 = [11,20,25,80]
data2 = [15,35,50,90]
data3 =[25,36,58,63]
data4=[30,40,68,78]
element = np.arange(4)
fig = plt.figure()
#first plot
ax1 = fig.add_subplot(2,2,1)
phase1 = ax1.plot(data1,color='blue', lw=2)
phase2 = ax1.plot(data2,color='blue', lw=2)
phase3 = ax1.plot(data3,color='green', lw=2)
phase4 = ax1.plot(data4,color='green', lw=2)
plt.xticks(element,('La','Ce','Pr','Nd'))
ax1.fill_between(element,data1,data2,color='grey')
ax1.set_yscale('log')
fig.set_size_inches(10,5)
#second plot
ax2 = fig.add_subplot(2,2,2,sharex=ax1,sharey=ax1)
phase1 = ax2.plot(data1,color='blue', lw=2)
phase2 = ax2.plot(data2,color='blue', lw=2)
phase3 = ax2.plot(data3,color='green', lw=2)
phase4 = ax2.plot(data4,color='green', lw=2)
plt.xticks(element,('La','Ce','Pr','Nd'))
#the fill is the ONLY thing to change
ax2.fill_between(element,data3,data4,color='red')
ax2.set_yscale('log')

plt.show()

1 个答案:

答案 0 :(得分:3)

我希望这会有所帮助

import numpy as np
import matplotlib.pyplot as plt

#data
data1 = [11,20,25,80]
data2 = [15,35,50,90]
data3 = [25,36,58,63]
data4 = [30,40,68,78]
element = np.arange(4)

# data is used to automatize the fill_between argument
data = [[data1,data2],[data3,data4]]

# creating an list of the colors used
cols = ['grey','red']

# creating the figure including all axes
fig,ax = plt.subplots(1,2)

for i,a in enumerate(ax):
    phase1 = a.plot(data1,color='blue', lw=2)
    phase2 = a.plot(data2,color='blue', lw=2)
    phase3 = a.plot(data3,color='green', lw=2)
    phase4 = a.plot(data4,color='green', lw=2)
    a.set_xticks(element)
    a.set_xticklabels(['La','Ce','Pr','Nd'])
    a.fill_between(element,data[i][0],data[i][1],color=cols[i])
    a.set_yscale('log')

fig.set_size_inches(10,5)