2

I'm new to python and I am trying to create a series of subplots with the only parameter changing being the fill_between parameter for each plot. Currently I repeat the whole code and change the fill_between for each subplot. Is there a more efficient way of creating a loop for the subplots where the only thing that changes is the fill_between? Below is an example of the type of plots I am trying to produce.

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 Answer 1

3

I hope this helps

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)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.