Petra
Petra

Reputation: 375

Error bars in matplotlib display over other curves

I have a plot in which some data is represented by a scatter plot with error bars and I want to fit a curve to it. However, no matter where in the code I plot the curve, the error bars float on top of it. I want the fitted curves to display in front of the error bars because otherwise I can't see it.

Here is a simple example of the issue:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

x = np.arange(1,10)
r = np.random.random(x.size)

fig1, ax = plt.subplots()
ln1 = ax.plot(2*x,x,'g')
ax3 = ax.twinx()
ln2 = ax3.errorbar(x,r,yerr=x,color='red',fmt='o')
ln2fit = ax3.plot(x,r-0.3,'b')

and the plot it produces:

enter image description here

There are two axes because I'm comparing two datasets.

As you can see, even though I plotted the curve above the error bars, the error bars and points still obscure the curve. What can I do to disable this?

Upvotes: 2

Views: 1934

Answers (1)

Stef
Stef

Reputation: 30579

You can specify the zorder:

ln2 = ax3.errorbar(x,r,yerr=x,color='red',fmt='o',zorder=1)

enter image description here

If you also want to have the green line in the foreground you need to move it's axes ax to a higher zorder (default is 0) and hide the axes patch of ax so that the then underlying ax3 stays visible:

ax.set_zorder(1)
ax.patch.set_visible(False)

enter image description here

Upvotes: 3

Related Questions