Подзаголовки в matplotlib, создающие цикл

Я новичок в 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()

person Geo    schedule 03.06.2015    source источник


Ответы (1)


надеюсь, это поможет

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)
person plonser    schedule 03.06.2015