From: Markus H. <mar...@ui...> - 2013-02-09 02:41:20
|
Hi, I think I have a problem with errorbars in a log plot. The problem is reproducible through the enclosed errorbar_log.py file. As you can see I plot a point with y = 10**(-5) and I want the errorbars drawn from 10**(-5.5) to 10**(-4.5) which should be symmetric in this plot but isn't. Here is the content of my errorbar_log.py file: #!/usr/bin/python import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) x = 0.0 y = 10**(-5.0) yerr_low = 10**(-5.5) yerr_upp = 10**(-4.5) ax.errorbar(x,y,yerr=[[yerr_low],[yerr_upp]],fmt='o',markersize=4) ax.set_xlim(-1.0,1.0) ax.set_ylim(1E-6,1E-3) ax.set_yscale('log') plt.savefig('errorbar.png') --------------------------------------------- 10**(-5.5) = 3.162277660168379e-06 and 10**(-4.5) = 3.1622776601683795e-05 but you can see that the lower boundary is not at the calculated value. <http://matplotlib.1069221.n5.nabble.com/file/n40412/errorbar.png> Do I misunderstand the behaviour of the errorbar function or is this a bug? Cheers, Markus -- View this message in context: http://matplotlib.1069221.n5.nabble.com/Errorbar-problem-tp40412.html Sent from the matplotlib - devel mailing list archive at Nabble.com. |
From: Thomas C. <tca...@gm...> - 2013-02-09 03:02:36
|
The bar is drawn from `y - yerr_low` to `y + yerr_upp` ax.errorbar(x + .5,y,yerr=[[y - yerr_low],[yerr_upp - y]],fmt='s',markersize=4) will get you what you want. Tom On Fri, Feb 8, 2013 at 8:41 PM, Markus Haider <mar...@ui...> wrote: > Hi, > > I think I have a problem with errorbars in a log plot. The problem is > reproducible through the enclosed errorbar_log.py file. As you can see I > plot a point with y = 10**(-5) and I want the errorbars drawn from > 10**(-5.5) to 10**(-4.5) which should be symmetric in this plot but isn't. > > Here is the content of my errorbar_log.py file: > > #!/usr/bin/python > import numpy as np > import matplotlib.pyplot as plt > > fig = plt.figure() > ax = fig.add_subplot(111) > x = 0.0 > y = 10**(-5.0) > yerr_low = 10**(-5.5) > yerr_upp = 10**(-4.5) > ax.errorbar(x,y,yerr=[[yerr_low],[yerr_upp]],fmt='o',markersize=4) > ax.set_xlim(-1.0,1.0) > ax.set_ylim(1E-6,1E-3) > ax.set_yscale('log') > plt.savefig('errorbar.png') > > --------------------------------------------- > > 10**(-5.5) = 3.162277660168379e-06 > and 10**(-4.5) = 3.1622776601683795e-05 > > but you can see that the lower boundary is not at the calculated value. > <http://matplotlib.1069221.n5.nabble.com/file/n40412/errorbar.png> > > > Do I misunderstand the behaviour of the errorbar function or is this a bug? > > Cheers, > Markus > > > > -- > View this message in context: http://matplotlib.1069221.n5.nabble.com/Errorbar-problem-tp40412.html > Sent from the matplotlib - devel mailing list archive at Nabble.com. > > ------------------------------------------------------------------------------ > Free Next-Gen Firewall Hardware Offer > Buy your Sophos next-gen firewall before the end March 2013 > and get the hardware for free! Learn more. > http://p.sf.net/sfu/sophos-d2d-feb > _______________________________________________ > Matplotlib-devel mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-devel -- Thomas Caswell tca...@gm... |
From: Markus H. <mar...@ui...> - 2013-02-09 18:49:28
|
Hi Tom, Thank you very much for your answer. Indeed this solves my problem. However, I was wondering if the documentation on this is correct. At http://matplotlib.org/api/axes_api.html?highlight=errorbar#matplotlib.axes.Axes.errorbar it says: xerr/yerr: [ scalar | N, Nx1, or 2xN array-like ] If a scalar number, len(N) array-like object, or an Nx1 array-like object, errorbars are drawn +/- value. If a sequence of shape 2xN, errorbars are drawn at -row1 and +row2 This sounds to me that for a 2xN argument it should be drawn from the actual supplied value, or would you interpret this differently? Thanks, Markus Am 2013-02-08 22:02, schrieb Thomas Caswell: > The bar is drawn from `y - yerr_low` to `y + yerr_upp` > > ax.errorbar(x + .5,y,yerr=[[y - yerr_low],[yerr_upp - > y]],fmt='s',markersize=4) > > will get you what you want. > > Tom > > On Fri, Feb 8, 2013 at 8:41 PM, Markus Haider <mar...@ui...> wrote: >> Hi, >> >> I think I have a problem with errorbars in a log plot. The problem is >> reproducible through the enclosed errorbar_log.py file. As you can see I >> plot a point with y = 10**(-5) and I want the errorbars drawn from >> 10**(-5.5) to 10**(-4.5) which should be symmetric in this plot but isn't. >> >> Here is the content of my errorbar_log.py file: >> >> #!/usr/bin/python >> import numpy as np >> import matplotlib.pyplot as plt >> >> fig = plt.figure() >> ax = fig.add_subplot(111) >> x = 0.0 >> y = 10**(-5.0) >> yerr_low = 10**(-5.5) >> yerr_upp = 10**(-4.5) >> ax.errorbar(x,y,yerr=[[yerr_low],[yerr_upp]],fmt='o',markersize=4) >> ax.set_xlim(-1.0,1.0) >> ax.set_ylim(1E-6,1E-3) >> ax.set_yscale('log') >> plt.savefig('errorbar.png') >> >> --------------------------------------------- >> >> 10**(-5.5) = 3.162277660168379e-06 >> and 10**(-4.5) = 3.1622776601683795e-05 >> >> but you can see that the lower boundary is not at the calculated value. >> <http://matplotlib.1069221.n5.nabble.com/file/n40412/errorbar.png> >> >> >> Do I misunderstand the behaviour of the errorbar function or is this a bug? >> >> Cheers, >> Markus >> >> >> >> -- >> View this message in context: http://matplotlib.1069221.n5.nabble.com/Errorbar-problem-tp40412.html >> Sent from the matplotlib - devel mailing list archive at Nabble.com. >> >> ------------------------------------------------------------------------------ >> Free Next-Gen Firewall Hardware Offer >> Buy your Sophos next-gen firewall before the end March 2013 >> and get the hardware for free! Learn more. >> http://p.sf.net/sfu/sophos-d2d-feb >> _______________________________________________ >> Matplotlib-devel mailing list >> Mat...@li... >> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel > > > -- > Thomas Caswell > tca...@gm... > |
From: Markus H. <mar...@ui...> - 2013-02-09 18:58:02
|
Actually never mind, I think I just interpreted it wrong. However it could perhaps be more clear if it would say something like If a sequence of shape 2xN, errorbars are drawn at y +/- row1/row2 Thanks, Markus Am 2013-02-09 13:49, schrieb Markus Haider: > Hi Tom, > > Thank you very much for your answer. Indeed this solves my problem. > However, I was wondering if the documentation on this is correct. > At > http://matplotlib.org/api/axes_api.html?highlight=errorbar#matplotlib.axes.Axes.errorbar > it says: > > xerr/yerr: [ scalar | N, Nx1, or 2xN array-like ] > If a scalar number, len(N) array-like object, or an Nx1 array-like > object, errorbars are drawn +/- value. > If a sequence of shape 2xN, errorbars are drawn at -row1 and +row2 > > This sounds to me that for a 2xN argument it should be drawn from the > actual supplied value, or would you interpret this differently? > > Thanks, > Markus > > Am 2013-02-08 22:02, schrieb Thomas Caswell: >> The bar is drawn from `y - yerr_low` to `y + yerr_upp` >> >> ax.errorbar(x + .5,y,yerr=[[y - yerr_low],[yerr_upp - >> y]],fmt='s',markersize=4) >> >> will get you what you want. >> >> Tom >> >> On Fri, Feb 8, 2013 at 8:41 PM, Markus Haider <mar...@ui...> wrote: >>> Hi, >>> >>> I think I have a problem with errorbars in a log plot. The problem is >>> reproducible through the enclosed errorbar_log.py file. As you can see I >>> plot a point with y = 10**(-5) and I want the errorbars drawn from >>> 10**(-5.5) to 10**(-4.5) which should be symmetric in this plot but isn't. >>> >>> Here is the content of my errorbar_log.py file: >>> >>> #!/usr/bin/python >>> import numpy as np >>> import matplotlib.pyplot as plt >>> >>> fig = plt.figure() >>> ax = fig.add_subplot(111) >>> x = 0.0 >>> y = 10**(-5.0) >>> yerr_low = 10**(-5.5) >>> yerr_upp = 10**(-4.5) >>> ax.errorbar(x,y,yerr=[[yerr_low],[yerr_upp]],fmt='o',markersize=4) >>> ax.set_xlim(-1.0,1.0) >>> ax.set_ylim(1E-6,1E-3) >>> ax.set_yscale('log') >>> plt.savefig('errorbar.png') >>> >>> --------------------------------------------- >>> >>> 10**(-5.5) = 3.162277660168379e-06 >>> and 10**(-4.5) = 3.1622776601683795e-05 >>> >>> but you can see that the lower boundary is not at the calculated value. >>> <http://matplotlib.1069221.n5.nabble.com/file/n40412/errorbar.png> >>> >>> >>> Do I misunderstand the behaviour of the errorbar function or is this a bug? >>> >>> Cheers, >>> Markus >>> >>> >>> >>> -- >>> View this message in context: http://matplotlib.1069221.n5.nabble.com/Errorbar-problem-tp40412.html >>> Sent from the matplotlib - devel mailing list archive at Nabble.com. >>> >>> ------------------------------------------------------------------------------ >>> Free Next-Gen Firewall Hardware Offer >>> Buy your Sophos next-gen firewall before the end March 2013 >>> and get the hardware for free! Learn more. >>> http://p.sf.net/sfu/sophos-d2d-feb >>> _______________________________________________ >>> Matplotlib-devel mailing list >>> Mat...@li... >>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel >> >> -- >> Thomas Caswell >> tca...@gm... >> > > ------------------------------------------------------------------------------ > Free Next-Gen Firewall Hardware Offer > Buy your Sophos next-gen firewall before the end March 2013 > and get the hardware for free! Learn more. > http://p.sf.net/sfu/sophos-d2d-feb > _______________________________________________ > Matplotlib-devel mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-devel > |
From: Thomas C. <tca...@gm...> - 2013-02-09 19:04:46
|
My default interpretation of errors is always relative to the value because that is how they are reported (100+10-20 not 100+110-80). (got your 2nd email while writing this) Would you find this clearer? Maybe xerr and yerr should be split up xerr/yerr: [ scalar | N, Nx1, or 2xN array-like ] If a scalar number, len(N) array-like object, or an Nx1 array-like object, errorbars are drawn x/y +/- value. If a sequence of shape 2xN, errorbars are drawn at x/y - row1 and x/y + row2 Tom On Sat, Feb 9, 2013 at 12:49 PM, Markus Haider <mar...@ui...> wrote: > Hi Tom, > > Thank you very much for your answer. Indeed this solves my problem. However, > I was wondering if the documentation on this is correct. > At > http://matplotlib.org/api/axes_api.html?highlight=errorbar#matplotlib.axes.Axes.errorbar > it says: > > xerr/yerr: [ scalar | N, Nx1, or 2xN array-like ] > If a scalar number, len(N) array-like object, or an Nx1 array-like object, > errorbars are drawn +/- value. > If a sequence of shape 2xN, errorbars are drawn at -row1 and +row2 > > This sounds to me that for a 2xN argument it should be drawn from the actual > supplied value, or would you interpret this differently? > > Thanks, > Markus > > Am 2013-02-08 22:02, schrieb Thomas Caswell: > >> The bar is drawn from `y - yerr_low` to `y + yerr_upp` >> >> ax.errorbar(x + .5,y,yerr=[[y - yerr_low],[yerr_upp - >> y]],fmt='s',markersize=4) >> >> will get you what you want. >> >> Tom >> >> On Fri, Feb 8, 2013 at 8:41 PM, Markus Haider <mar...@ui...> >> wrote: >>> >>> Hi, >>> >>> I think I have a problem with errorbars in a log plot. The problem is >>> reproducible through the enclosed errorbar_log.py file. As you can see I >>> plot a point with y = 10**(-5) and I want the errorbars drawn from >>> 10**(-5.5) to 10**(-4.5) which should be symmetric in this plot but >>> isn't. >>> >>> Here is the content of my errorbar_log.py file: >>> >>> #!/usr/bin/python >>> import numpy as np >>> import matplotlib.pyplot as plt >>> >>> fig = plt.figure() >>> ax = fig.add_subplot(111) >>> x = 0.0 >>> y = 10**(-5.0) >>> yerr_low = 10**(-5.5) >>> yerr_upp = 10**(-4.5) >>> ax.errorbar(x,y,yerr=[[yerr_low],[yerr_upp]],fmt='o',markersize=4) >>> ax.set_xlim(-1.0,1.0) >>> ax.set_ylim(1E-6,1E-3) >>> ax.set_yscale('log') >>> plt.savefig('errorbar.png') >>> >>> --------------------------------------------- >>> >>> 10**(-5.5) = 3.162277660168379e-06 >>> and 10**(-4.5) = 3.1622776601683795e-05 >>> >>> but you can see that the lower boundary is not at the calculated value. >>> <http://matplotlib.1069221.n5.nabble.com/file/n40412/errorbar.png> >>> >>> >>> Do I misunderstand the behaviour of the errorbar function or is this a >>> bug? >>> >>> Cheers, >>> Markus >>> >>> >>> >>> -- >>> View this message in context: >>> http://matplotlib.1069221.n5.nabble.com/Errorbar-problem-tp40412.html >>> Sent from the matplotlib - devel mailing list archive at Nabble.com. >>> >>> >>> ------------------------------------------------------------------------------ >>> Free Next-Gen Firewall Hardware Offer >>> Buy your Sophos next-gen firewall before the end March 2013 >>> and get the hardware for free! Learn more. >>> http://p.sf.net/sfu/sophos-d2d-feb >>> _______________________________________________ >>> Matplotlib-devel mailing list >>> Mat...@li... >>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel >> >> >> >> -- >> Thomas Caswell >> tca...@gm... >> > -- Thomas Caswell tca...@gm... |
From: Markus H. <mar...@ui...> - 2013-02-10 17:42:08
|
Hi Tom, Yes, I would find the version you suggested clearer. I mean now that I know how to read it the old version seems quite logical, but if it would have been written the way you suggested I would not have made my misinterpretation. Thank you for your help, Cheers, Markus Am 2013-02-09 14:04, schrieb Thomas Caswell: > My default interpretation of errors is always relative to the value > because that is how they are reported (100+10-20 not 100+110-80). > > (got your 2nd email while writing this) > > Would you find this clearer? Maybe xerr and yerr should be split up > > xerr/yerr: [ scalar | N, Nx1, or 2xN array-like ] > If a scalar number, len(N) array-like object, or an Nx1 array-like > object, errorbars are drawn x/y +/- value. > If a sequence of shape 2xN, errorbars are drawn at x/y - row1 and x/y + row2 > > Tom > > On Sat, Feb 9, 2013 at 12:49 PM, Markus Haider <mar...@ui...> wrote: >> Hi Tom, >> >> Thank you very much for your answer. Indeed this solves my problem. However, >> I was wondering if the documentation on this is correct. >> At >> http://matplotlib.org/api/axes_api.html?highlight=errorbar#matplotlib.axes.Axes.errorbar >> it says: >> >> xerr/yerr: [ scalar | N, Nx1, or 2xN array-like ] >> If a scalar number, len(N) array-like object, or an Nx1 array-like object, >> errorbars are drawn +/- value. >> If a sequence of shape 2xN, errorbars are drawn at -row1 and +row2 >> >> This sounds to me that for a 2xN argument it should be drawn from the actual >> supplied value, or would you interpret this differently? >> >> Thanks, >> Markus >> >> Am 2013-02-08 22:02, schrieb Thomas Caswell: >> >>> The bar is drawn from `y - yerr_low` to `y + yerr_upp` >>> >>> ax.errorbar(x + .5,y,yerr=[[y - yerr_low],[yerr_upp - >>> y]],fmt='s',markersize=4) >>> >>> will get you what you want. >>> >>> Tom >>> >>> On Fri, Feb 8, 2013 at 8:41 PM, Markus Haider <mar...@ui...> >>> wrote: >>>> Hi, >>>> >>>> I think I have a problem with errorbars in a log plot. The problem is >>>> reproducible through the enclosed errorbar_log.py file. As you can see I >>>> plot a point with y = 10**(-5) and I want the errorbars drawn from >>>> 10**(-5.5) to 10**(-4.5) which should be symmetric in this plot but >>>> isn't. >>>> >>>> Here is the content of my errorbar_log.py file: >>>> >>>> #!/usr/bin/python >>>> import numpy as np >>>> import matplotlib.pyplot as plt >>>> >>>> fig = plt.figure() >>>> ax = fig.add_subplot(111) >>>> x = 0.0 >>>> y = 10**(-5.0) >>>> yerr_low = 10**(-5.5) >>>> yerr_upp = 10**(-4.5) >>>> ax.errorbar(x,y,yerr=[[yerr_low],[yerr_upp]],fmt='o',markersize=4) >>>> ax.set_xlim(-1.0,1.0) >>>> ax.set_ylim(1E-6,1E-3) >>>> ax.set_yscale('log') >>>> plt.savefig('errorbar.png') >>>> >>>> --------------------------------------------- >>>> >>>> 10**(-5.5) = 3.162277660168379e-06 >>>> and 10**(-4.5) = 3.1622776601683795e-05 >>>> >>>> but you can see that the lower boundary is not at the calculated value. >>>> <http://matplotlib.1069221.n5.nabble.com/file/n40412/errorbar.png> >>>> >>>> >>>> Do I misunderstand the behaviour of the errorbar function or is this a >>>> bug? >>>> >>>> Cheers, >>>> Markus >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://matplotlib.1069221.n5.nabble.com/Errorbar-problem-tp40412.html >>>> Sent from the matplotlib - devel mailing list archive at Nabble.com. >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Free Next-Gen Firewall Hardware Offer >>>> Buy your Sophos next-gen firewall before the end March 2013 >>>> and get the hardware for free! Learn more. >>>> http://p.sf.net/sfu/sophos-d2d-feb >>>> _______________________________________________ >>>> Matplotlib-devel mailing list >>>> Mat...@li... >>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel >>> >>> >>> -- >>> Thomas Caswell >>> tca...@gm... >>> > > > -- > Thomas Caswell > tca...@gm... > |