I'm trying to plot a line plot over a bar plot using MatPlotLib. So far I have both the plots showing but I can't get a secondary y-axis with a different scale to work. When I try and put another one in it overwrites the original scale. My code is below
def hridef_base(x):
if x == 1:
deltatlapexit = ExitSummary['Avg tLap'] - ExitSummary2['Avg tLap']
plt.figure()
index = (EntrySummary.index + 1)
barwidth = 0.2
plt.ylim(0.0, 65.0)
plt.bar(index-barwidth, EntrySummary['Avg FRH'], barwidth, color='r', yerr=EntrySummary['FRH StDev'], ecolor='k', label='Entry')
plt.bar(index, ApexSummary['Avg FRH'], barwidth, color='#4169E1', yerr=ApexSummary['FRH StDev'], ecolor='k', label='Apex')
plt.bar(index+barwidth, ExitSummary['Avg FRH'], barwidth, color='#32CD32', yerr=ExitSummary['FRH StDev'], ecolor='k', label='Exit')
plt.plot(index, deltatlapexit, color='k', label='Entry')
plt.xlabel('Turn Number')
plt.ylabel('Average FRideH')
plt.title('Average FRideH for Baseline setup')
plt.xticks(index)
plt.legend()
else:
print "Baseline FRideH Not Selected"
Any advice on the matter is appreciated but please talk me through what to do instead of posting links to sites. I need to understand why I'm not able to do this.
Thank-you in advance. Please comment if I've missed anything out.
Thanks to the comments below the graph now has two separate y-axis. How ever the y-label for the bar data has jumped to the right and if I try and plot the line y-label I get an Attribute error.
def hridef_base(x):
if x == 1:
deltatlapexit = ExitSummary['Avg tLap'] - ExitSummary2['Avg tLap']
fig, axis1 = subplots()
index = (EntrySummary.index + 1)
barwidth = 0.2
axis1.ylim(0.0, 65.0)
axis1.bar(index-barwidth, EntrySummary['Avg FRH'], barwidth, color='r', yerr=EntrySummary['FRH StDev'], ecolor='k', label='Entry')
axis1.bar(index, ApexSummary['Avg FRH'], barwidth, color='#4169E1', yerr=ApexSummary['FRH StDev'], ecolor='k', label='Apex')
axis1.bar(index+barwidth, ExitSummary['Avg FRH'], barwidth, color='#32CD32', yerr=ExitSummary['FRH StDev'], ecolor='k', label='Exit')
axis2 = axis1.twinx()
axis2.set_ylim(-10.0, 10.0)
axis2.plot(index, deltatlapexit, color='k', label='tDelta')
axis1.xlabel('Turn Number')
axis1.ylabel('Average FRideH')
axis2.set_ylabel('tDelta')
axis1.title('Average FRideH for Baseline setup')
axis1.xticks(index)
axis1.legend()
axis2.legend()
else:
print "Baseline FRideH Not Selected"
I would insert an image but I need 10 rep points...
The error I receive is: NameError: global name 'subplots' is not defined
I don't have your data, but using the barplot example from matplotlib, here's an example with a bar plot and a line plot overplotted, with independently scaled y-axes:
from matplotlib import pyplot as plt
import numpy as np
plt.figure()
N = 5
menMeans = (20, 35, 30, 35, 27)
menStd = (2, 3, 4, 1, 2)
width = 0.35 # the width of the bars
womenMeans = (25, 32, 34, 20, 25)
womenStd = (3, 5, 2, 3, 3)
ind = np.arange(N)
plt.ylim(0.0, 65.0)
plt.bar(ind, menMeans, width, color='r', yerr=menStd, label='Men means')
plt.bar(ind+width, womenMeans, width, color='y', yerr=womenStd, label='Women means')
plt.ylabel('Bar plot')
x = np.linspace(0, N)
y = np.sin(x)
axes2 = plt.twinx()
axes2.plot(x, y, color='k', label='Sine')
axes2.set_ylim(-1, 1)
axes2.set_ylabel('Line plot')
plt.show()

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With