Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problem with errorbar in log scale #163

Closed
ddale opened this issue Jun 20, 2011 · 6 comments · Fixed by #2147
Closed

Problem with errorbar in log scale #163

ddale opened this issue Jun 20, 2011 · 6 comments · Fixed by #2147
Labels
status: confirmed bug status: needs clarification Issues that need more information to resolve.

Comments

@ddale
Copy link
Contributor

ddale commented Jun 20, 2011

Original report at SourceForge, opened Wed Sep 1 13:52:54 2010

When using log scale, if the error is larger than flux, the error bar does not plot at all:

import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.errorbar([1.],[1.],yerr=[2.])
ax.set_yscale('log')
fig.savefig('test.png')

However, I think it would make more correct to plot the line for the errorbar, and to make it go down to -infinity.

@M-funk
Copy link

M-funk commented Mar 19, 2012

The error bar does plot, but for some reason, it doesn't show the vertical connecting bar. You'll see if you do this:

fig = plt.figure()
ax = fig.add_subplot(111)
ax.errorbar([1.,2.,3.],[1.,1.,1.],yerr = [0.1,3.,0.4])
ax.set_yscale('log')
fig.savefig('test.png')

something like this outputs:
http://i.imgur.com/LOIi7.png

I think the problem lies in the fact that numpy computes log(1), in any base, equal to 0

@pelson
Copy link
Member

pelson commented Aug 19, 2012

Confirming. Pretty sure this is related to the fact that you are trying to plot an error bar down to log(0). This works if your not trying log(0). For instance:

ax.errorbar([10, 11, 12], [8, 9, 10], yerr=[0.5, 0.7, 0.9])

Looks fine. @M-funk: can you confirm what you are expecting to see? I can't see that there is an action on this issue (perhaps a warning might be suitable when you are at log(0))?

@neggert
Copy link
Contributor

neggert commented Mar 18, 2013

This can be worked around by doing

ax.set_yscale('log', nonposy="clip")

Maybe this should be the default for set_yscale? This seems to cause quite a few problems.

@kreczko
Copy link

kreczko commented May 13, 2013

@neggert : Nice workaround.
Wish I had seen it before I wasted 1 hour to try and fix it ;)

From a beginners standpoint I would definitely vote for making it the default (unless there are obvious reasons not to do so).

@mdboom
Copy link
Member

mdboom commented May 13, 2013

👍 on making the default clip, with the appropriate API change warning.

@SebastianoF
Copy link

SebastianoF commented Jan 24, 2019

Uhm... No, the errorbar should not be asymmetric when passing in log scale.
Please consider
http://faculty.washington.edu/stuve/uwess/log_error.pdf
If I understood correctly the documentation, I would consider nonposx="mask" as the best option of the default behavour.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status: confirmed bug status: needs clarification Issues that need more information to resolve.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants