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.
UPDATE
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


twiny? Because otherwise, I don't see how you can adjust the scale of the secondary y-axis (as you mention).plt.ylabelwill change the last axis object you were working on. If you useaxis2.ylabelthis will set the label on the second axis. it will help to specify an axis handle for the first graph usingfig, axis1 = subplots()and then useaxis1.barto plot your barcharts.plt.ylabelbefore the call totwinx()? 2/ How are trying to set the y-label for the twin-plot?