You can subscribe to this list here.
| 2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
(12) |
Sep
(12) |
Oct
(56) |
Nov
(65) |
Dec
(37) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(59) |
Feb
(78) |
Mar
(153) |
Apr
(205) |
May
(184) |
Jun
(123) |
Jul
(171) |
Aug
(156) |
Sep
(190) |
Oct
(120) |
Nov
(154) |
Dec
(223) |
| 2005 |
Jan
(184) |
Feb
(267) |
Mar
(214) |
Apr
(286) |
May
(320) |
Jun
(299) |
Jul
(348) |
Aug
(283) |
Sep
(355) |
Oct
(293) |
Nov
(232) |
Dec
(203) |
| 2006 |
Jan
(352) |
Feb
(358) |
Mar
(403) |
Apr
(313) |
May
(165) |
Jun
(281) |
Jul
(316) |
Aug
(228) |
Sep
(279) |
Oct
(243) |
Nov
(315) |
Dec
(345) |
| 2007 |
Jan
(260) |
Feb
(323) |
Mar
(340) |
Apr
(319) |
May
(290) |
Jun
(296) |
Jul
(221) |
Aug
(292) |
Sep
(242) |
Oct
(248) |
Nov
(242) |
Dec
(332) |
| 2008 |
Jan
(312) |
Feb
(359) |
Mar
(454) |
Apr
(287) |
May
(340) |
Jun
(450) |
Jul
(403) |
Aug
(324) |
Sep
(349) |
Oct
(385) |
Nov
(363) |
Dec
(437) |
| 2009 |
Jan
(500) |
Feb
(301) |
Mar
(409) |
Apr
(486) |
May
(545) |
Jun
(391) |
Jul
(518) |
Aug
(497) |
Sep
(492) |
Oct
(429) |
Nov
(357) |
Dec
(310) |
| 2010 |
Jan
(371) |
Feb
(657) |
Mar
(519) |
Apr
(432) |
May
(312) |
Jun
(416) |
Jul
(477) |
Aug
(386) |
Sep
(419) |
Oct
(435) |
Nov
(320) |
Dec
(202) |
| 2011 |
Jan
(321) |
Feb
(413) |
Mar
(299) |
Apr
(215) |
May
(284) |
Jun
(203) |
Jul
(207) |
Aug
(314) |
Sep
(321) |
Oct
(259) |
Nov
(347) |
Dec
(209) |
| 2012 |
Jan
(322) |
Feb
(414) |
Mar
(377) |
Apr
(179) |
May
(173) |
Jun
(234) |
Jul
(295) |
Aug
(239) |
Sep
(276) |
Oct
(355) |
Nov
(144) |
Dec
(108) |
| 2013 |
Jan
(170) |
Feb
(89) |
Mar
(204) |
Apr
(133) |
May
(142) |
Jun
(89) |
Jul
(160) |
Aug
(180) |
Sep
(69) |
Oct
(136) |
Nov
(83) |
Dec
(32) |
| 2014 |
Jan
(71) |
Feb
(90) |
Mar
(161) |
Apr
(117) |
May
(78) |
Jun
(94) |
Jul
(60) |
Aug
(83) |
Sep
(102) |
Oct
(132) |
Nov
(154) |
Dec
(96) |
| 2015 |
Jan
(45) |
Feb
(138) |
Mar
(176) |
Apr
(132) |
May
(119) |
Jun
(124) |
Jul
(77) |
Aug
(31) |
Sep
(34) |
Oct
(22) |
Nov
(23) |
Dec
(9) |
| 2016 |
Jan
(26) |
Feb
(17) |
Mar
(10) |
Apr
(8) |
May
(4) |
Jun
(8) |
Jul
(6) |
Aug
(5) |
Sep
(9) |
Oct
(4) |
Nov
|
Dec
|
| 2017 |
Jan
(5) |
Feb
(7) |
Mar
(1) |
Apr
(5) |
May
|
Jun
(3) |
Jul
(6) |
Aug
(1) |
Sep
|
Oct
(2) |
Nov
(1) |
Dec
|
| 2018 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2025 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Jeffrey B. <jbl...@al...> - 2012-08-22 15:29:43
|
On Aug 22, 2012, at 10:04 AM, Virgil Stokes wrote:
> On 21-Aug-2012 17:52, Jeffrey Blackburne wrote:
>>
>> On Aug 21, 2012, at 10:58 AM, Virgil Stokes wrote:
>>
>>> In reference to my previous email.
>>>
>>> How can I find the outliers (samples points beyond the whiskers)
>>> in the data
>>> used for the boxplot?
>>>
>>> Here is a code snippet that shows how it was used for the timings
>>> data (a list
>>> of 4 sublists (y1,y2,y3,y4), each containing 400,000 real data
>>> values),
>>> ...
>>> ...
>>> ...
>>> # Box Plots
>>> plt.subplot(2,1,2)
>>> timings = [y1,y2,y3,y4]
>>> pos = np.array(range(len(timings)))+1
>>> bp = plt.boxplot( timings, sym='k+', patch_artist=True,
>>> positions=pos, notch=1, bootstrap=5000 )
>>>
>>> plt.xlabel('Algorithm')
>>> plt.ylabel('Exection time (sec)')
>>> plt.ylim(0.9*ymin,1.1*ymax)
>>>
>>> plt.setp(bp['whiskers'], color='k', linestyle='-' )
>>> plt.setp(bp['fliers'], markersize=3.0)
>>> plt.title('Box plots (%4d trials)' %(n))
>>> plt.show()
>>> ...
>>> ...
>>> ...
>>>
>>> Again my questions:
>>> 1) How to get the value of the median?
>>
>> This is easily calculated from your data. Numpy will even do it
>> for you: np.median(timings)
>>
>>> 2) How to find the outliers (outside the whiskers)?
>>
>> From the boxplot documentation: the whiskers extend to the most
>> extreme data point within distance X of the bottom or top of the
>> box, where X is 1.5 times the extent of the box. Any points more
>> extreme than that are the outliers. The box itself of course
>> extends from the 25th percentile to the 75th percentile of your
>> data. Again, you can easily calculate these values from your data.
>>
>>> 3) How to find the width of the notch?
>>
>> Again, from the docs: with bootstrap=5000, it calculates the width
>> of the notch by bootstrap resampling your data (the timings array)
>> 5000 times and finding the 95% confidence interval of the median,
>> and uses that as the notch width. You can redo that yourself
>> pretty easily. Here is some bootstrap code for you to adapt:
>> http://mail.scipy.org/pipermail/scipy-user/2009-July/021704.html
>>
>> I encourage you to read the documentation! This page is very
>> useful for reference:
>> http://matplotlib.sourceforge.net/api/pyplot_api.html
>>
>> -Jeff
>>
> Yes Jeff,
> These are very useful links; however, box plots have a parameter
> called the "adjacent value" (from the McGill reference),
>
> "The plotted whisker extends to the adjacent value, which is the
> most extreme data value that is not an outlier."
>
> It seems there should be one for the lower and one for the upper
> whisker --- how can one get these two values from boxplot?
Look at bp['whiskers']
For those who got here by searching: bp is the object returned by
plt.boxplot()
> Also, is there anyway to directly get the indices of the outliers?
Look into np.where()
|
|
From: Virgil S. <vs...@it...> - 2012-08-22 14:24:51
|
On 22-Aug-2012 11:23, Virgil Stokes wrote:
> On 21-Aug-2012 17:59, Paul Hobson wrote:
>> On Tue, Aug 21, 2012 at 8:56 AM, Virgil Stokes <vs...@it...> wrote:
>>> On 21-Aug-2012 17:50, Paul Hobson wrote:
>>>> On Tue, Aug 21, 2012 at 7:58 AM, Virgil Stokes <vs...@it...> wrote:
>>>>> In reference to my previous email.
>>>>>
>>>>> How can I find the outliers (samples points beyond the whiskers) in the
>>>>> data
>>>>> used for the boxplot?
>>>>>
>>>>> Here is a code snippet that shows how it was used for the timings data (a
>>>>> list
>>>>> of 4 sublists (y1,y2,y3,y4), each containing 400,000 real data values),
>>>>> ...
>>>>> ...
>>>>> ...
>>>>> # Box Plots
>>>>> plt.subplot(2,1,2)
>>>>> timings = [y1,y2,y3,y4]
>>>>> pos = np.array(range(len(timings)))+1
>>>>> bp = plt.boxplot( timings, sym='k+', patch_artist=True,
>>>>> positions=pos, notch=1, bootstrap=5000 )
>>>>>
>>>>> plt.xlabel('Algorithm')
>>>>> plt.ylabel('Exection time (sec)')
>>>>> plt.ylim(0.9*ymin,1.1*ymax)
>>>>>
>>>>> plt.setp(bp['whiskers'], color='k', linestyle='-' )
>>>>> plt.setp(bp['fliers'], markersize=3.0)
>>>>> plt.title('Box plots (%4d trials)' %(n))
>>>>> plt.show()
>>>>> ...
>>>>> ...
>>>>> ...
>>>>>
>>>>> Again my questions:
>>>>> 1) How to get the value of the median?
>>>>> 2) How to find the outliers (outside the whiskers)?
>>>>> 3) How to find the width of the notch?
>>>> Virgil, the objects stuffed inside the `bp` dictionary should have
>>>> methods to retrieve their values. Let's see:
>>>>
>>>> In [35]: x = np.random.lognormal(mean=1.25, sigma=1.35, size=(37,3))
>>>>
>>>> In [36]: bp = plt.boxplot(x, bootstrap=5000, notch=True)
>>>>
>>>> In [37]: # Question 1
>>>> ...: print('medians')
>>>> ...: for n, median in enumerate(bp['medians']):
>>>> ...: print('%d: %f' % (n, median.get_ydata()[0]))
>>>> ...:
>>>> medians
>>>> 0: 6.339692
>>>> 1: 3.449320
>>>> 2: 4.503706
>>>>
>>>> In [38]: # Question 2
>>>> ...: print('fliers')
>>>> ...: for n in range(0, len(bp['fliers']), 2):
>>>> ...: print('%d: upper outliers = \t' % (n/2,))
>>>> ...: print(bp['fliers'][n].get_ydata())
>>>> ...: print('\n%d: lower outliers = \t' % (n/2,))
>>>> ...: print(bp['fliers'][n+1].get_ydata())
>>>> ...: print('\n')
>>>> ...:
>>> You had no outliers!
>>>
>>>> In [39]: # Question 3
>>>> ...: print('Confidence Intervals')
>>>> ...: for n, box in enumerate(bp['boxes']):
>>>> ...: print('%d: lower CI: %f' % (n, box.get_ydata()[2]))
>>>> ...: print('%d: upper CI: %f' % (n, box.get_ydata()[4]))
>>>> ...:
>>>> Confidence Intervals
>>>> 0: lower CI: 1.760701
>>>> 0: upper CI: 10.102221
>>>> 1: lower CI: 1.626386
>>>> 1: upper CI: 5.601927
>>>> 2: lower CI: 2.173173
>>>>
>>>> Hope that helps,
>>>> -paul
>>> Just what I was looking for Paul! Thanks very much.
>>>
>>> One final question --- Where can I find the documentation that answers my
>>> questions and gives more details about the equations used for the width of
>>> notch. etc.?
>>>
>>> Thanks again :-)
>> That should all be in the boxplot docstring. Do you use ipython? If
>> not, you should :)
>>
>> if so, just do `plt.boxplot?` at the ipython terminal and it'll show up.
>> -paul
> I still have a problem...
> Let me show the updated code snippet again
> ...
> ...
> ...
> # Box Plots
> iplt += 1
> plt.figure(iplt)
> timings = [ya[0],ya[1],ya[2],ya[3]]
> pos = np.array(range(len(timings)))+1
> bp = plt.boxplot( timings, sym='k+', patch_artist=True,
> positions=pos, notch=1, bootstrap=5000 )
> print ('medians')
> for nn,median in enumerate(bp['medians']):
> print('%d: %f' %(nn,median.get_ydata()[0]))
>
> print('fliers')
> for nn in range(0, len(bp['fliers']), 2):
> print('%d: upper outliers = \t' % (nn/2,))
> print(bp['fliers'][nn].get_ydata())
> print('\n%d: lower outliers = \t' % (nn/2,))
> print(bp['fliers'][nn+1].get_ydata())
> print('\n')
>
> print('Confidence Intervals')
> for nn, box in enumerate(bp['boxes']):
> print('%d: lower CI: %f' % (nn, box.get_ydata()[2]))<--- FAILS!
> print('%d: upper CI: %f' % (nn, box.get_ydata()[4]))
> ...
> ...
> ...
>
> Medians and fliers work perfectly; but, I get the following error message when
> trying to access the confidence intervals:
>
> AttributeError: 'PathPatch' object has no attribute 'get_ydata'
>
> Note, I am using boxplot with 4 sets of data and I am using matplotlib vers. 1.1.0.
>
> Any suggestions on how to fix this problem?
I found the solution,
one must have,
patch_artist=False
in the boxplot call.
:-)
|
|
From: Virgil S. <vs...@it...> - 2012-08-22 14:04:10
|
On 21-Aug-2012 17:52, Jeffrey Blackburne wrote:
>
> On Aug 21, 2012, at 10:58 AM, Virgil Stokes wrote:
>
>> In reference to my previous email.
>>
>> How can I find the outliers (samples points beyond the whiskers) in the data
>> used for the boxplot?
>>
>> Here is a code snippet that shows how it was used for the timings data (a list
>> of 4 sublists (y1,y2,y3,y4), each containing 400,000 real data values),
>> ...
>> ...
>> ...
>> # Box Plots
>> plt.subplot(2,1,2)
>> timings = [y1,y2,y3,y4]
>> pos = np.array(range(len(timings)))+1
>> bp = plt.boxplot( timings, sym='k+', patch_artist=True,
>> positions=pos, notch=1, bootstrap=5000 )
>>
>> plt.xlabel('Algorithm')
>> plt.ylabel('Exection time (sec)')
>> plt.ylim(0.9*ymin,1.1*ymax)
>>
>> plt.setp(bp['whiskers'], color='k', linestyle='-' )
>> plt.setp(bp['fliers'], markersize=3.0)
>> plt.title('Box plots (%4d trials)' %(n))
>> plt.show()
>> ...
>> ...
>> ...
>>
>> Again my questions:
>> 1) How to get the value of the median?
>
> This is easily calculated from your data. Numpy will even do it for you:
> np.median(timings)
>
>> 2) How to find the outliers (outside the whiskers)?
>
> From the boxplot documentation: the whiskers extend to the most extreme data
> point within distance X of the bottom or top of the box, where X is 1.5 times
> the extent of the box. Any points more extreme than that are the outliers. The
> box itself of course extends from the 25th percentile to the 75th percentile
> of your data. Again, you can easily calculate these values from your data.
>
>> 3) How to find the width of the notch?
>
> Again, from the docs: with bootstrap=5000, it calculates the width of the
> notch by bootstrap resampling your data (the timings array) 5000 times and
> finding the 95% confidence interval of the median, and uses that as the notch
> width. You can redo that yourself pretty easily. Here is some bootstrap code
> for you to adapt:
> http://mail.scipy.org/pipermail/scipy-user/2009-July/021704.html
>
> I encourage you to read the documentation! This page is very useful for
> reference:
> http://matplotlib.sourceforge.net/api/pyplot_api.html
>
> -Jeff
>
Yes Jeff,
These are very useful links; however, box plots have a parameter called the
"adjacent value" (from the McGill reference),
"The plotted whisker extends to the adjacent value, which is the most extreme
data value that is not an outlier."
It seems there should be one for the lower and one for the upper whisker --- how
can one get these two values from boxplot?
Also, is there anyway to directly get the indices of the outliers?
|
|
From: Petro <x....@gm...> - 2012-08-22 14:02:55
|
Michael Droettboom <md...@st...> writes: > Can you try the GtkAgg backend instead and confirm the bug isn't there? > The "pure" Gtk backend doesn't see a lot of use these days and isn't > very well tested. > > Mike > Thanks. It solved the problem. |
|
From: Michael D. <md...@st...> - 2012-08-22 12:28:43
|
Can you try the GtkAgg backend instead and confirm the bug isn't there? The "pure" Gtk backend doesn't see a lot of use these days and isn't very well tested. Mike On 08/22/2012 08:17 AM, Petro Khoroshyy wrote: > Damon McDougall > <dam...@gm...> writes: > >> On Wed, Aug 22, 2012 at 11:28:54AM +0200, Petro wrote: >>> Hi list. >>> I generate some png images using matplotlib, and get very different >>> results depending on figuresize >>> __________________________________________________________________ >>> from pylab import figure, plot >>> import pylab as plt >>> import numpy as np >>> figure() >>> plt.subplot(2,1,1) >>> plot(np.random.rand(10),'o') >>> plt.subplot(2,1,2) >>> plot(np.random.rand(10),'o') >>> pic_name='fit_rates1.png' >>> path_name='/home/petro/tmp/' >>> plt.savefig(path_name + pic_name) >>> __________________________________________________________________ >>> >>> the code above generates the following image: >>> https://lh3.googleusercontent.com/-107Ducz_CA0/UDShKMtejtI/AAAAAAAACls/YOeahS3tQA8/s400/fit_rates1.png >>> >>> now if I increase a figure size parameter: >>> __________________________________________________________________ >>> from pylab import figure, plot >>> import pylab as plt >>> import numpy as np >>> plt.ioff() >>> from matplotlib import rcParams >>> golden_mean = (np.sqrt(5)-1.0)/2.0 # Aesthetic ratio >>> fig_width = 5.6 # width in inches >>> fig_height = fig_width*golden_mean # height in inches >>> rcParams['figure.figsize']=fig_width, fig_height*3 >>> figure() >>> plt.subplot(2,1,1) >>> plot(np.random.rand(10),'o') >>> plt.subplot(2,1,2) >>> plot(np.random.rand(10),'o') >>> pic_name='fit_rates2.png' >>> path_name='/home/petro/tmp/' >>> plt.savefig(path_name + pic_name) >>> >> What backend are you using? >> >> print plt.get_backend() > It outputs GTK. > > > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users |
|
From: Petro K. <kho...@gm...> - 2012-08-22 12:17:53
|
Damon McDougall <dam...@gm...> writes: > On Wed, Aug 22, 2012 at 11:28:54AM +0200, Petro wrote: >> Hi list. >> I generate some png images using matplotlib, and get very different >> results depending on figuresize >> __________________________________________________________________ >> from pylab import figure, plot >> import pylab as plt >> import numpy as np >> figure() >> plt.subplot(2,1,1) >> plot(np.random.rand(10),'o') >> plt.subplot(2,1,2) >> plot(np.random.rand(10),'o') >> pic_name='fit_rates1.png' >> path_name='/home/petro/tmp/' >> plt.savefig(path_name + pic_name) >> __________________________________________________________________ >> >> the code above generates the following image: >> https://lh3.googleusercontent.com/-107Ducz_CA0/UDShKMtejtI/AAAAAAAACls/YOeahS3tQA8/s400/fit_rates1.png >> >> now if I increase a figure size parameter: >> __________________________________________________________________ >> from pylab import figure, plot >> import pylab as plt >> import numpy as np >> plt.ioff() >> from matplotlib import rcParams >> golden_mean = (np.sqrt(5)-1.0)/2.0 # Aesthetic ratio >> fig_width = 5.6 # width in inches >> fig_height = fig_width*golden_mean # height in inches >> rcParams['figure.figsize']=fig_width, fig_height*3 >> figure() >> plt.subplot(2,1,1) >> plot(np.random.rand(10),'o') >> plt.subplot(2,1,2) >> plot(np.random.rand(10),'o') >> pic_name='fit_rates2.png' >> path_name='/home/petro/tmp/' >> plt.savefig(path_name + pic_name) >> > > What backend are you using? > > print plt.get_backend() It outputs GTK. |
|
From: Damon M. <dam...@gm...> - 2012-08-22 10:29:30
|
On Wed, Aug 22, 2012 at 11:28:54AM +0200, Petro wrote: > Hi list. > I generate some png images using matplotlib, and get very different > results depending on figuresize > __________________________________________________________________ > from pylab import figure, plot > import pylab as plt > import numpy as np > figure() > plt.subplot(2,1,1) > plot(np.random.rand(10),'o') > plt.subplot(2,1,2) > plot(np.random.rand(10),'o') > pic_name='fit_rates1.png' > path_name='/home/petro/tmp/' > plt.savefig(path_name + pic_name) > __________________________________________________________________ > > the code above generates the following image: > https://lh3.googleusercontent.com/-107Ducz_CA0/UDShKMtejtI/AAAAAAAACls/YOeahS3tQA8/s400/fit_rates1.png > > now if I increase a figure size parameter: > __________________________________________________________________ > from pylab import figure, plot > import pylab as plt > import numpy as np > plt.ioff() > from matplotlib import rcParams > golden_mean = (np.sqrt(5)-1.0)/2.0 # Aesthetic ratio > fig_width = 5.6 # width in inches > fig_height = fig_width*golden_mean # height in inches > rcParams['figure.figsize']=fig_width, fig_height*3 > figure() > plt.subplot(2,1,1) > plot(np.random.rand(10),'o') > plt.subplot(2,1,2) > plot(np.random.rand(10),'o') > pic_name='fit_rates2.png' > path_name='/home/petro/tmp/' > plt.savefig(path_name + pic_name) > What backend are you using? print plt.get_backend() -- Damon McDougall http://www.damon-is-a-geek.com B2.39 Mathematics Institute University of Warwick Coventry West Midlands CV4 7AL United Kingdom |
|
From: Petro <x....@gm...> - 2012-08-22 09:29:19
|
Hi list. I generate some png images using matplotlib, and get very different results depending on figuresize __________________________________________________________________ from pylab import figure, plot import pylab as plt import numpy as np figure() plt.subplot(2,1,1) plot(np.random.rand(10),'o') plt.subplot(2,1,2) plot(np.random.rand(10),'o') pic_name='fit_rates1.png' path_name='/home/petro/tmp/' plt.savefig(path_name + pic_name) __________________________________________________________________ the code above generates the following image: https://lh3.googleusercontent.com/-107Ducz_CA0/UDShKMtejtI/AAAAAAAACls/YOeahS3tQA8/s400/fit_rates1.png now if I increase a figure size parameter: __________________________________________________________________ from pylab import figure, plot import pylab as plt import numpy as np plt.ioff() from matplotlib import rcParams golden_mean = (np.sqrt(5)-1.0)/2.0 # Aesthetic ratio fig_width = 5.6 # width in inches fig_height = fig_width*golden_mean # height in inches rcParams['figure.figsize']=fig_width, fig_height*3 figure() plt.subplot(2,1,1) plot(np.random.rand(10),'o') plt.subplot(2,1,2) plot(np.random.rand(10),'o') pic_name='fit_rates2.png' path_name='/home/petro/tmp/' plt.savefig(path_name + pic_name) __________________________________________________________________ the result looks strange like this: https://lh5.googleusercontent.com/-4GRQxuRFvh4/UDSiRrNy59I/AAAAAAAACmA/Kho3prHFpUU/s640/fit_rates2.png Has anyone experienced behaviour like this? Thanks. Petro |
|
From: Virgil S. <vs...@it...> - 2012-08-22 09:23:55
|
On 21-Aug-2012 17:59, Paul Hobson wrote:
> On Tue, Aug 21, 2012 at 8:56 AM, Virgil Stokes <vs...@it...> wrote:
>> On 21-Aug-2012 17:50, Paul Hobson wrote:
>>> On Tue, Aug 21, 2012 at 7:58 AM, Virgil Stokes <vs...@it...> wrote:
>>>> In reference to my previous email.
>>>>
>>>> How can I find the outliers (samples points beyond the whiskers) in the
>>>> data
>>>> used for the boxplot?
>>>>
>>>> Here is a code snippet that shows how it was used for the timings data (a
>>>> list
>>>> of 4 sublists (y1,y2,y3,y4), each containing 400,000 real data values),
>>>> ...
>>>> ...
>>>> ...
>>>> # Box Plots
>>>> plt.subplot(2,1,2)
>>>> timings = [y1,y2,y3,y4]
>>>> pos = np.array(range(len(timings)))+1
>>>> bp = plt.boxplot( timings, sym='k+', patch_artist=True,
>>>> positions=pos, notch=1, bootstrap=5000 )
>>>>
>>>> plt.xlabel('Algorithm')
>>>> plt.ylabel('Exection time (sec)')
>>>> plt.ylim(0.9*ymin,1.1*ymax)
>>>>
>>>> plt.setp(bp['whiskers'], color='k', linestyle='-' )
>>>> plt.setp(bp['fliers'], markersize=3.0)
>>>> plt.title('Box plots (%4d trials)' %(n))
>>>> plt.show()
>>>> ...
>>>> ...
>>>> ...
>>>>
>>>> Again my questions:
>>>> 1) How to get the value of the median?
>>>> 2) How to find the outliers (outside the whiskers)?
>>>> 3) How to find the width of the notch?
>>> Virgil, the objects stuffed inside the `bp` dictionary should have
>>> methods to retrieve their values. Let's see:
>>>
>>> In [35]: x = np.random.lognormal(mean=1.25, sigma=1.35, size=(37,3))
>>>
>>> In [36]: bp = plt.boxplot(x, bootstrap=5000, notch=True)
>>>
>>> In [37]: # Question 1
>>> ...: print('medians')
>>> ...: for n, median in enumerate(bp['medians']):
>>> ...: print('%d: %f' % (n, median.get_ydata()[0]))
>>> ...:
>>> medians
>>> 0: 6.339692
>>> 1: 3.449320
>>> 2: 4.503706
>>>
>>> In [38]: # Question 2
>>> ...: print('fliers')
>>> ...: for n in range(0, len(bp['fliers']), 2):
>>> ...: print('%d: upper outliers = \t' % (n/2,))
>>> ...: print(bp['fliers'][n].get_ydata())
>>> ...: print('\n%d: lower outliers = \t' % (n/2,))
>>> ...: print(bp['fliers'][n+1].get_ydata())
>>> ...: print('\n')
>>> ...:
>> You had no outliers!
>>
>>> In [39]: # Question 3
>>> ...: print('Confidence Intervals')
>>> ...: for n, box in enumerate(bp['boxes']):
>>> ...: print('%d: lower CI: %f' % (n, box.get_ydata()[2]))
>>> ...: print('%d: upper CI: %f' % (n, box.get_ydata()[4]))
>>> ...:
>>> Confidence Intervals
>>> 0: lower CI: 1.760701
>>> 0: upper CI: 10.102221
>>> 1: lower CI: 1.626386
>>> 1: upper CI: 5.601927
>>> 2: lower CI: 2.173173
>>>
>>> Hope that helps,
>>> -paul
>> Just what I was looking for Paul! Thanks very much.
>>
>> One final question --- Where can I find the documentation that answers my
>> questions and gives more details about the equations used for the width of
>> notch. etc.?
>>
>> Thanks again :-)
> That should all be in the boxplot docstring. Do you use ipython? If
> not, you should :)
>
> if so, just do `plt.boxplot?` at the ipython terminal and it'll show up.
> -paul
I still have a problem...
Let me show the updated code snippet again
...
...
...
# Box Plots
iplt += 1
plt.figure(iplt)
timings = [ya[0],ya[1],ya[2],ya[3]]
pos = np.array(range(len(timings)))+1
bp = plt.boxplot( timings, sym='k+', patch_artist=True,
positions=pos, notch=1, bootstrap=5000 )
print ('medians')
for nn,median in enumerate(bp['medians']):
print('%d: %f' %(nn,median.get_ydata()[0]))
print('fliers')
for nn in range(0, len(bp['fliers']), 2):
print('%d: upper outliers = \t' % (nn/2,))
print(bp['fliers'][nn].get_ydata())
print('\n%d: lower outliers = \t' % (nn/2,))
print(bp['fliers'][nn+1].get_ydata())
print('\n')
print('Confidence Intervals')
for nn, box in enumerate(bp['boxes']):
print('%d: lower CI: %f' % (nn, box.get_ydata()[2]))<--- FAILS!
print('%d: upper CI: %f' % (nn, box.get_ydata()[4]))
...
...
...
Medians and fliers work perfectly; but, I get the following error message when
trying to access the confidence intervals:
AttributeError: 'PathPatch' object has no attribute 'get_ydata'
Note, I am using boxplot with 4 sets of data and I am using matplotlib vers. 1.1.0.
Any suggestions on how to fix this problem?
|
|
From: Peter S. J. <pet...@gm...> - 2012-08-21 17:45:31
|
Hi Everyone,
I'm having problems when rasterizing many lines in a plot using the
rasterized=True keyword using the pdf output.
Some version info:
matplotlib version 1.1.1rc
ubuntu 12.04
python 2.7.3
Here's a basic example that demonstrates my problem:
# Import matplotlib to create a pdf document
import matplotlib
matplotlib.use('Agg')
from matplotlib.backends.backend_pdf import PdfPages
pdf = PdfPages('rasterized_test.pdf')
import matplotlib.pylab as plt
# some test data
import numpy as np
ts = np.linspace(0,2*np.pi,100) * np.ones((200,100))
ts += (np.linspace(0, np.pi, 200)[np.newaxis] * np.ones((100,200))).T
ys = np.sin(ts)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(ts[0], ys.T, color='r', lw=0.5, alpha=0.5, rasterized=True)
pdf.savefig()
pdf.close()
Essentially, I have a lot (200 in this case) of closely overlapping lines
which makes the resulting figure (not rasterized) overly difficult to load.
I would like to rasterize these lines, such that the axis labels (and other
elements of the plot, not shown) remain vectors while the solution
trajectories are flattened to a single raster background. However, using
the code above, the image still takes a long time to load since each
trajectory is independently rasterized, resulting in multiple layers. (If I
open the resulting pdf with a program like inkscape, I can manipulate each
trajectory independently.)
Is it possible to flatten all of the rasterized elements into a single
layer, so the pdf size would be greatly reduced?
Thanks,
--Peter
|
|
From: Paul H. <pmh...@gm...> - 2012-08-21 15:59:09
|
On Tue, Aug 21, 2012 at 8:56 AM, Virgil Stokes <vs...@it...> wrote:
> On 21-Aug-2012 17:50, Paul Hobson wrote:
>>
>> On Tue, Aug 21, 2012 at 7:58 AM, Virgil Stokes <vs...@it...> wrote:
>>>
>>> In reference to my previous email.
>>>
>>> How can I find the outliers (samples points beyond the whiskers) in the
>>> data
>>> used for the boxplot?
>>>
>>> Here is a code snippet that shows how it was used for the timings data (a
>>> list
>>> of 4 sublists (y1,y2,y3,y4), each containing 400,000 real data values),
>>> ...
>>> ...
>>> ...
>>> # Box Plots
>>> plt.subplot(2,1,2)
>>> timings = [y1,y2,y3,y4]
>>> pos = np.array(range(len(timings)))+1
>>> bp = plt.boxplot( timings, sym='k+', patch_artist=True,
>>> positions=pos, notch=1, bootstrap=5000 )
>>>
>>> plt.xlabel('Algorithm')
>>> plt.ylabel('Exection time (sec)')
>>> plt.ylim(0.9*ymin,1.1*ymax)
>>>
>>> plt.setp(bp['whiskers'], color='k', linestyle='-' )
>>> plt.setp(bp['fliers'], markersize=3.0)
>>> plt.title('Box plots (%4d trials)' %(n))
>>> plt.show()
>>> ...
>>> ...
>>> ...
>>>
>>> Again my questions:
>>> 1) How to get the value of the median?
>>> 2) How to find the outliers (outside the whiskers)?
>>> 3) How to find the width of the notch?
>>
>> Virgil, the objects stuffed inside the `bp` dictionary should have
>> methods to retrieve their values. Let's see:
>>
>> In [35]: x = np.random.lognormal(mean=1.25, sigma=1.35, size=(37,3))
>>
>> In [36]: bp = plt.boxplot(x, bootstrap=5000, notch=True)
>>
>> In [37]: # Question 1
>> ...: print('medians')
>> ...: for n, median in enumerate(bp['medians']):
>> ...: print('%d: %f' % (n, median.get_ydata()[0]))
>> ...:
>> medians
>> 0: 6.339692
>> 1: 3.449320
>> 2: 4.503706
>>
>> In [38]: # Question 2
>> ...: print('fliers')
>> ...: for n in range(0, len(bp['fliers']), 2):
>> ...: print('%d: upper outliers = \t' % (n/2,))
>> ...: print(bp['fliers'][n].get_ydata())
>> ...: print('\n%d: lower outliers = \t' % (n/2,))
>> ...: print(bp['fliers'][n+1].get_ydata())
>> ...: print('\n')
>> ...:
>
> You had no outliers!
>
>>
>> In [39]: # Question 3
>> ...: print('Confidence Intervals')
>> ...: for n, box in enumerate(bp['boxes']):
>> ...: print('%d: lower CI: %f' % (n, box.get_ydata()[2]))
>> ...: print('%d: upper CI: %f' % (n, box.get_ydata()[4]))
>> ...:
>> Confidence Intervals
>> 0: lower CI: 1.760701
>> 0: upper CI: 10.102221
>> 1: lower CI: 1.626386
>> 1: upper CI: 5.601927
>> 2: lower CI: 2.173173
>>
>> Hope that helps,
>> -paul
>
> Just what I was looking for Paul! Thanks very much.
>
> One final question --- Where can I find the documentation that answers my
> questions and gives more details about the equations used for the width of
> notch. etc.?
>
> Thanks again :-)
That should all be in the boxplot docstring. Do you use ipython? If
not, you should :)
if so, just do `plt.boxplot?` at the ipython terminal and it'll show up.
-paul
|
|
From: Paul H. <pmh...@gm...> - 2012-08-21 15:55:22
|
On Tue, Aug 21, 2012 at 7:58 AM, Virgil Stokes <vs...@it...> wrote:
> In reference to my previous email.
>
> How can I find the outliers (samples points beyond the whiskers) in the data
> used for the boxplot?
>
> Here is a code snippet that shows how it was used for the timings data (a list
> of 4 sublists (y1,y2,y3,y4), each containing 400,000 real data values),
> ...
> ...
> ...
> # Box Plots
> plt.subplot(2,1,2)
> timings = [y1,y2,y3,y4]
> pos = np.array(range(len(timings)))+1
> bp = plt.boxplot( timings, sym='k+', patch_artist=True,
> positions=pos, notch=1, bootstrap=5000 )
>
> plt.xlabel('Algorithm')
> plt.ylabel('Exection time (sec)')
> plt.ylim(0.9*ymin,1.1*ymax)
>
> plt.setp(bp['whiskers'], color='k', linestyle='-' )
> plt.setp(bp['fliers'], markersize=3.0)
> plt.title('Box plots (%4d trials)' %(n))
> plt.show()
> ...
> ...
> ...
>
> Again my questions:
> 1) How to get the value of the median?
> 2) How to find the outliers (outside the whiskers)?
> 3) How to find the width of the notch?
Ooops. Here's my reply -- this time to whole list
Virgil, the objects stuffed inside the `bp` dictionary should have
methods to retrieve their values. Let's see:
In [35]: x = np.random.lognormal(mean=1.25, sigma=1.35, size=(37,3))
In [36]: bp = plt.boxplot(x, bootstrap=5000, notch=True)
In [37]: # Question 1
...: print('medians')
...: for n, median in enumerate(bp['medians']):
...: print('%d: %f' % (n, median.get_ydata()[0]))
...:
medians
0: 6.339692
1: 3.449320
2: 4.503706
In [38]: # Question 2
...: print('fliers')
...: for n in range(0, len(bp['fliers']), 2):
...: print('%d: upper outliers = \t' % (n/2,))
...: print(bp['fliers'][n].get_ydata())
...: print('\n%d: lower outliers = \t' % (n/2,))
...: print(bp['fliers'][n+1].get_ydata())
...: print('\n')
...:
In [39]: # Question 3
...: print('Confidence Intervals')
...: for n, box in enumerate(bp['boxes']):
...: print('%d: lower CI: %f' % (n, box.get_ydata()[2]))
...: print('%d: upper CI: %f' % (n, box.get_ydata()[4]))
...:
Confidence Intervals
0: lower CI: 1.760701
0: upper CI: 10.102221
1: lower CI: 1.626386
1: upper CI: 5.601927
2: lower CI: 2.173173
Hope that helps,
-paul
|
|
From: Jeffrey B. <jbl...@al...> - 2012-08-21 15:52:39
|
On Aug 21, 2012, at 10:58 AM, Virgil Stokes wrote:
> In reference to my previous email.
>
> How can I find the outliers (samples points beyond the whiskers) in
> the data
> used for the boxplot?
>
> Here is a code snippet that shows how it was used for the timings
> data (a list
> of 4 sublists (y1,y2,y3,y4), each containing 400,000 real data
> values),
> ...
> ...
> ...
> # Box Plots
> plt.subplot(2,1,2)
> timings = [y1,y2,y3,y4]
> pos = np.array(range(len(timings)))+1
> bp = plt.boxplot( timings, sym='k+', patch_artist=True,
> positions=pos, notch=1, bootstrap=5000 )
>
> plt.xlabel('Algorithm')
> plt.ylabel('Exection time (sec)')
> plt.ylim(0.9*ymin,1.1*ymax)
>
> plt.setp(bp['whiskers'], color='k', linestyle='-' )
> plt.setp(bp['fliers'], markersize=3.0)
> plt.title('Box plots (%4d trials)' %(n))
> plt.show()
> ...
> ...
> ...
>
> Again my questions:
> 1) How to get the value of the median?
This is easily calculated from your data. Numpy will even do it for
you: np.median(timings)
> 2) How to find the outliers (outside the whiskers)?
From the boxplot documentation: the whiskers extend to the most
extreme data point within distance X of the bottom or top of the box,
where X is 1.5 times the extent of the box. Any points more extreme
than that are the outliers. The box itself of course extends from the
25th percentile to the 75th percentile of your data. Again, you can
easily calculate these values from your data.
> 3) How to find the width of the notch?
Again, from the docs: with bootstrap=5000, it calculates the width of
the notch by bootstrap resampling your data (the timings array) 5000
times and finding the 95% confidence interval of the median, and uses
that as the notch width. You can redo that yourself pretty easily.
Here is some bootstrap code for you to adapt:
http://mail.scipy.org/pipermail/scipy-user/2009-July/021704.html
I encourage you to read the documentation! This page is very useful
for reference:
http://matplotlib.sourceforge.net/api/pyplot_api.html
-Jeff
|
|
From: Virgil S. <vs...@it...> - 2012-08-21 14:58:28
|
In reference to my previous email.
How can I find the outliers (samples points beyond the whiskers) in the data
used for the boxplot?
Here is a code snippet that shows how it was used for the timings data (a list
of 4 sublists (y1,y2,y3,y4), each containing 400,000 real data values),
...
...
...
# Box Plots
plt.subplot(2,1,2)
timings = [y1,y2,y3,y4]
pos = np.array(range(len(timings)))+1
bp = plt.boxplot( timings, sym='k+', patch_artist=True,
positions=pos, notch=1, bootstrap=5000 )
plt.xlabel('Algorithm')
plt.ylabel('Exection time (sec)')
plt.ylim(0.9*ymin,1.1*ymax)
plt.setp(bp['whiskers'], color='k', linestyle='-' )
plt.setp(bp['fliers'], markersize=3.0)
plt.title('Box plots (%4d trials)' %(n))
plt.show()
...
...
...
Again my questions:
1) How to get the value of the median?
2) How to find the outliers (outside the whiskers)?
3) How to find the width of the notch?
|
|
From: Auré G. <aur...@ya...> - 2012-08-21 13:18:08
|
http://housesforsells.com/wp-admin/makoler.html?tebv=vzbeba |
|
From: Jeff W. <js...@fa...> - 2012-08-21 13:15:42
|
On 8/20/12 10:26 PM, Scott Henderson wrote:
> I'm trying to efficiently get the distances of all points on a map to a
> specified point. If the map is in projected coordinates, what is the
> best way of going about this? Is there is a 'standard' way to get the
> distance between points through internal basemap functions? After some
> scrounging around what I have below works for individual points, but is
> there a way to avoid the big for loop?
>
> Any advice would be appreciated.
> Thanks.
Scott: The pyproj Geod methods don't take numpy arrays, as you
discovered. It's very accurate and robust, but slow since you have to
loop over the points. Since you are assuming the earth is a perfect
sphere you could use the less accurate Haversine formula:
# function to compute great circle distance between point lat1 and lon1
and arrays of points
# given by lons, lats
def get_dist(lon1,lons,lat1,lats):
# great circle distance.
arg =
np.sin(lat1)*np.sin(lats)+np.cos(lat1)*np.cos(lats)*np.cos(lon1-lons)
arg = np.where(np.fabs(arg) < 1., arg, 0.999999)
return np.arccos(arg)
-Jeff
>
>
> # --------------------------------------
> from mpl_toolkits.basemap import Basemap
> from mpl_toolkits.basemap import pyproj
> import numpy as np
> import matplotlib.pyplot as plt
>
> fig = plt.figure()
> ax = fig.add_subplot(111)
>
> LL = (-69, -26)
> UR = (-66, -21)
> map = Basemap(projection='merc',
> llcrnrlat=LL[1],
> urcrnrlat=UR[1],
> llcrnrlon=LL[0],
> urcrnrlon=UR[0],
> resolution='i',
> suppress_ticks=False,
> ax=ax)
>
> lons, lats, xs, ys = map.makegrid(200, 200, returnxy=True)
> lon1, lat1 = (-67.28, -23.78)
>
> gc = pyproj.Geod(a=map.rmajor, b=map.rminor)
> #azis12, azis21, distances = gc.inv(lon1,lat1,lons,lats) #doesn't work
> with vectors or matrices?
> distances = np.zeros(lons.size)
> for i, (lon, lat) in enumerate(zip(lons.flatten(),lats.flatten())):
> azi12, azi21, distances[i] = gc.inv(lon1,lat1,lon,lat)
> distances = distances.reshape(200,200) / 1000.0 #in km
>
> # Plot perimeters of equal distance
> levels = [50] #[50,100,150]
> map.drawcountries()
> x1,y1 = map(lon1,lat1)
> map.plot(x1,y1,'m*')
> cs = map.contour(xs, ys, distances, levels)
>
|
|
From: Scott H. <st...@co...> - 2012-08-21 03:19:46
|
I'm trying to efficiently get the distances of all points on a map to a
specified point. If the map is in projected coordinates, what is the
best way of going about this? Is there is a 'standard' way to get the
distance between points through internal basemap functions? After some
scrounging around what I have below works for individual points, but is
there a way to avoid the big for loop?
Any advice would be appreciated.
Thanks.
# --------------------------------------
from mpl_toolkits.basemap import Basemap
from mpl_toolkits.basemap import pyproj
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
LL = (-69, -26)
UR = (-66, -21)
map = Basemap(projection='merc',
llcrnrlat=LL[1],
urcrnrlat=UR[1],
llcrnrlon=LL[0],
urcrnrlon=UR[0],
resolution='i',
suppress_ticks=False,
ax=ax)
lons, lats, xs, ys = map.makegrid(200, 200, returnxy=True)
lon1, lat1 = (-67.28, -23.78)
gc = pyproj.Geod(a=map.rmajor, b=map.rminor)
#azis12, azis21, distances = gc.inv(lon1,lat1,lons,lats) #doesn't work
with vectors or matrices?
distances = np.zeros(lons.size)
for i, (lon, lat) in enumerate(zip(lons.flatten(),lats.flatten())):
azi12, azi21, distances[i] = gc.inv(lon1,lat1,lon,lat)
distances = distances.reshape(200,200) / 1000.0 #in km
# Plot perimeters of equal distance
levels = [50] #[50,100,150]
map.drawcountries()
x1,y1 = map(lon1,lat1)
map.plot(x1,y1,'m*')
cs = map.contour(xs, ys, distances, levels)
--
---------------
Scott T. Henderson
http://www.geo.cornell.edu/eas/gstudent/sth54/contact.html
|
|
From: Jeff W. <js...@fa...> - 2012-08-21 02:08:59
|
On 8/20/12 8:21 PM, Scott Henderson wrote: > On Mon 20 Aug 2012 06:29:01 PM EDT, Jeff Whitaker wrote: >> On 8/20/12 4:41 PM, Scott Henderson wrote: >>> I'm having trouble with transform_scalar() and imshow() with basemap. >>> Essential I have data from satellite tracks that are either smaller >>> or larger than the map extent, so I don't want to use >>> Basemap.imshow() which sets the 'extent' keyword automatically. >>> >>> I tried following the following suggestion, but I can't get things to >>> line up.. >>> http://comments.gmane.org/gmane.comp.python.matplotlib.general/25085 >>> >>> I suspect I've done something wrong in the code below?: >> >> Scott: If you use the pcolormesh or contourf Basemap methods (instead >> of imshow), you can specify the map projection coordinates of your >> data and it will be plotted correctly (whether or not it covers the >> whole map projection region). >> >> -Jeff >>> >>> >>> # ------------------------------- >>> from mpl_toolkits.basemap import Basemap >>> import matplotlib.pyplot as plt >>> >>> LL = (-68, -26) >>> UR = (-66, -21) >>> bmap = Basemap(projection='merc', >>> llcrnrlat=LL[1], >>> urcrnrlat=UR[1], >>> llcrnrlon=LL[0], >>> urcrnrlon=UR[0], >>> resolution='i', >>> suppress_ticks=False, >>> ax=ax) >>> bmap.drawcountries(linewidth=1) >>> >>> # Overlay image with extents that don't match map boundaries >>> nLon, nLat = image.shape >>> LL = (-69.915, -31.161) >>> UR = (-65.075, -17.334) >>> dy = -0.006666664 >>> lats = UR[1] + dy * np.arange(nLat) >>> extent = (LL[0], UR[0], LL[1], UR[1]) >>> nx = nLon; ny = nLat >>> image_xy = bmap.transform_scalar(image, lons, lats[::-1], nx, ny) >>> x, y = bmap(extent[:2],extent[2:]) >>> extent_xy = (x[0], x[1], y[0], y[1]) >>> im = plt.imshow(image_xy, extent=extent_xy) >>> >>> >>> >>> -- >>> --------------- >>> Scott T. Henderson >>> http://www.geo.cornell.edu/eas/gstudent/sth54/contact.html >>> >>> >>> ------------------------------------------------------------------------------ >>> >>> Live Security Virtual Conference >>> Exclusive live event will cover all the ways today's security and >>> threat landscape has changed and how IT managers can respond. >>> Discussions >>> will include endpoint security, mobile security and the latest in >>> malware >>> threats.http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>> >>> >>> _______________________________________________ >>> Matplotlib-users mailing list >>> Mat...@li... >>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >> >> >> -- >> Jeffrey S. Whitaker Phone : (303)497-6313 >> Meteorologist FAX : (303)497-6449 >> NOAA/OAR/PSD R/PSD1 Email :Jef...@no... >> 325 Broadway Office : Skaggs Research Cntr 1D-113 >> Boulder, CO, USA 80303-3328 Web :http://tinyurl.com/5telg > > Thanks Jeff, > > pcolormesh seems to get the georeferencing correct. Why is it that > imshow doesn't work? The trouble with pcolormesh is that it's much > slower, the file sizes get bigger and when zooming into detailed > regions the pixels edges show up even when I set edgecolors='None'. > I've attached a few screenshots for comparison. Scott: That's weird - I don't know why the edges show. The only thing you're getting with imshow is interpolation. To use imshow, you need to have a grid that exactly fits the map projection region. You could do this with transform_scalar using the keyword masked=True, which will assign missing values to grid points outside the range of the input grid. When you plot with imshow, these areas should just show up as transparent. -Jeff > > # New version: > # ------------------- > data_xy, x, y = bmap.transform_scalar(data[::-1], lons, lats[::-1], > nx, ny, returnxy=True) > data_xym = np.ma.array(data_xy, mask=np.isnan(data_xy)) > im = bmap.pcolormesh(x,y,data_xym, > shading='flat', #'gouraud' > edgecolors='None', > alpha=alpha, > vmin=cmin, > vmax=cmax) > plt.colorbar(im) > > > # Different figures attached > > > > -- > --------------- > Scott T. Henderson > http://www.geo.cornell.edu/eas/gstudent/sth54/contact.html > |
|
From: Daniel H. <dh...@gm...> - 2012-08-21 02:08:49
|
Hmm, I just found out that if I change path.Path.contains_point to use "point_on_path" instead of "point_in_path", the containment tests work properly. I'm not that familiar with the path code...is the difference that one is testing for polygonal insideness, and one is testing for literally being on the "stroke"? If so, do we have to make sure that the proper one is called if there are no polygons involved in the path? On Mon, Aug 20, 2012 at 9:28 PM, Daniel Hyams <dh...@gm...> wrote: > I've run into a strange problem with contains() on an arrow; there is a > large area to the left of the arrow that insists that it is contained > within the arrow. Small runnable sample attached. > > I've looked at the path for the arrow, and it looks fine to me. I even > went so far as to hack a STOP onto the end of the path, but that resulted > in the same behavior. > > Can anyone else confirm this behavior? matplotlib 1.1.1 is what I'm > using. Seen on both Windows, Linux, and OSX. > > -- > Daniel Hyams > dh...@gm... > -- Daniel Hyams dh...@gm... |
|
From: Daniel H. <dh...@gm...> - 2012-08-21 01:29:01
|
I've run into a strange problem with contains() on an arrow; there is a large area to the left of the arrow that insists that it is contained within the arrow. Small runnable sample attached. I've looked at the path for the arrow, and it looks fine to me. I even went so far as to hack a STOP onto the end of the path, but that resulted in the same behavior. Can anyone else confirm this behavior? matplotlib 1.1.1 is what I'm using. Seen on both Windows, Linux, and OSX. -- Daniel Hyams dh...@gm... |
|
From: Jeff W. <jef...@no...> - 2012-08-20 22:29:14
|
On 8/20/12 4:41 PM, Scott Henderson wrote: > I'm having trouble with transform_scalar() and imshow() with basemap. > Essential I have data from satellite tracks that are either smaller or > larger than the map extent, so I don't want to use Basemap.imshow() > which sets the 'extent' keyword automatically. > > I tried following the following suggestion, but I can't get things to > line up.. > http://comments.gmane.org/gmane.comp.python.matplotlib.general/25085 > > I suspect I've done something wrong in the code below?: Scott: If you use the pcolormesh or contourf Basemap methods (instead of imshow), you can specify the map projection coordinates of your data and it will be plotted correctly (whether or not it covers the whole map projection region). -Jeff > > > # ------------------------------- > from mpl_toolkits.basemap import Basemap > import matplotlib.pyplot as plt > > LL = (-68, -26) > UR = (-66, -21) > bmap = Basemap(projection='merc', > llcrnrlat=LL[1], > urcrnrlat=UR[1], > llcrnrlon=LL[0], > urcrnrlon=UR[0], > resolution='i', > suppress_ticks=False, > ax=ax) > bmap.drawcountries(linewidth=1) > > # Overlay image with extents that don't match map boundaries > nLon, nLat = image.shape > LL = (-69.915, -31.161) > UR = (-65.075, -17.334) > dy = -0.006666664 > lats = UR[1] + dy * np.arange(nLat) > extent = (LL[0], UR[0], LL[1], UR[1]) > nx = nLon; ny = nLat > image_xy = bmap.transform_scalar(image, lons, lats[::-1], nx, ny) > x, y = bmap(extent[:2],extent[2:]) > extent_xy = (x[0], x[1], y[0], y[1]) > im = plt.imshow(image_xy, extent=extent_xy) > > > > -- > --------------- > Scott T. Henderson > http://www.geo.cornell.edu/eas/gstudent/sth54/contact.html > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > > > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Jeffrey S. Whitaker Phone : (303)497-6313 Meteorologist FAX : (303)497-6449 NOAA/OAR/PSD R/PSD1 Email : Jef...@no... 325 Broadway Office : Skaggs Research Cntr 1D-113 Boulder, CO, USA 80303-3328 Web : http://tinyurl.com/5telg |
|
From: Virgil S. <vs...@it...> - 2012-08-20 22:12:39
|
I have been generating boxplots with matplotlib 1.1.0 and the plots look great. How can I find the median, fliers, etc. that are used for the boxplots? In general, where can I find documentation on how to get these data from a boxplot? Best regards! [Using matplotlib 1.1.0 with Python 2.7.3 on a Windows Vista 32-bit platform] |
|
From: Scott H. <st...@co...> - 2012-08-20 21:34:38
|
I'm having trouble with transform_scalar() and imshow() with basemap. Essential I have data from satellite tracks that are either smaller or larger than the map extent, so I don't want to use Basemap.imshow() which sets the 'extent' keyword automatically. I tried following the following suggestion, but I can't get things to line up.. http://comments.gmane.org/gmane.comp.python.matplotlib.general/25085 I suspect I've done something wrong in the code below?: # ------------------------------- from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt LL = (-68, -26) UR = (-66, -21) bmap = Basemap(projection='merc', llcrnrlat=LL[1], urcrnrlat=UR[1], llcrnrlon=LL[0], urcrnrlon=UR[0], resolution='i', suppress_ticks=False, ax=ax) bmap.drawcountries(linewidth=1) # Overlay image with extents that don't match map boundaries nLon, nLat = image.shape LL = (-69.915, -31.161) UR = (-65.075, -17.334) dy = -0.006666664 lats = UR[1] + dy * np.arange(nLat) extent = (LL[0], UR[0], LL[1], UR[1]) nx = nLon; ny = nLat image_xy = bmap.transform_scalar(image, lons, lats[::-1], nx, ny) x, y = bmap(extent[:2],extent[2:]) extent_xy = (x[0], x[1], y[0], y[1]) im = plt.imshow(image_xy, extent=extent_xy) -- --------------- Scott T. Henderson http://www.geo.cornell.edu/eas/gstudent/sth54/contact.html |
|
From: Michael D. <md...@st...> - 2012-08-20 18:27:43
|
Thanks for this. It's been a long-standing bug that text is handled by bounding box, but it's been difficult to find a way forward without breaking backward compatibility. I've filed an issue for this here. https://github.com/matplotlib/matplotlib/issues/1121 It may be, in the long run, that we want to fix the other backends to use baselines rather than fixing Cairo to use bounding boxes. Mike On 08/20/2012 01:07 PM, Freddie Witherden wrote: > On 19/08/12 23:48, Freddie Witherden wrote: >> Hello, >> >> Using the Cairo backend with the following snippet: >> >> from matplotlib.figure import Figure >> from matplotlib.artist import setp >> from matplotlib.backends.backend_agg import FigureCanvasAgg >> from matplotlib.backends.backend_cairo import FigureCanvasCairo >> import numpy as np >> >> fig = Figure() >> ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) >> x = np.arange(0, 10, 0.2) >> >> ax1.plot(x, np.sin(x)) >> ax1.xaxis.set_ticklabels(['Apr', 'Jul', 'Oct', '\'12', 'Apr', 'Jul']) >> setp(ax1.yaxis.get_ticklabels(), visible=False) >> >> FigureCanvasCairo(fig).print_figure('test.png') >> >> >> Results in the x-axis tick labels being significantly displaced. >> Specifically, "Oct" and "'12" are positioned far closer to the axis than >> either "Apr" or "Jul". >> >> With the AGG backend all of the labels are roughly aligned to the >> baseline of the font -- give or take a pixel. >> >> I have observed this on a Gentoo and Debian system, both running 1.1.1, >> albeit with different default fonts. >> >> Although I am not completely sure it appears as if a label contains a >> glyph that extends below the baseline, e.g. 'p' or 'J', that the label >> is forced away from the axis. >> >> Can anyone suggest a workaround for this (or explain where I am going >> wrong)? > I have been looking into this issue today and it /appears/ to be because > the Cairo backend -- or more precisely -- cairo::show_text method takes > a y-coordinate relative to the baseline. This makes sense given that > the descent of a font is a well-defined concept in Cairo (and can be > extracted via the font_extents method). However, as far as I can tell, > matplotlib expects the draw_text method to provide an absolute y-coordinate. > > The result is that any text with a descender is pushed downwards > (assuming a default rotation angle). This can be visualized by > > setp(ax1.xaxis.get_ticklabels(), backgroundcolor='r') > > The solution is to have the draw_text method account for any descenders. > After a bit of juggling the relevant portion of draw_text becomes: > > ctx = gc.ctx > ctx.new_path() > #ctx.move_to (x, y) > ctx.select_font_face (prop.get_name(), > self.fontangles [prop.get_style()], > self.fontweights[prop.get_weight()]) > > size = prop.get_size_in_points() * self.dpi / 72.0 > ctx.set_font_size(size) > > y_bearing, w, h = ctx.text_extents(s.encode("utf-8"))[1:4] > ctx.move_to(x, y - (h + y_bearing)) > > ctx.save() > if angle: > ctx.rotate (-angle * np.pi / 180) > #ctx.set_font_size (size) > ctx.show_text (s.encode("utf-8")) > ctx.restore() > > where commented lines highlight modifications (specifically, the > movement of the set_font_size and move_to calls). In my limited testing > this fixes the aforementioned issues. Discrepancies between baselines > are now limited to +/- 1px (the same as with the AGG backend). > Eliminating these one pixel misalignments is rather difficult so long as > text rendering is performed relative to the bounding box as opposed to a > baseline. > > Regards, Freddie. > > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > > > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users |
|
From: Freddie W. <fr...@wi...> - 2012-08-20 17:08:02
|
On 19/08/12 23:48, Freddie Witherden wrote:
> Hello,
>
> Using the Cairo backend with the following snippet:
>
> from matplotlib.figure import Figure
> from matplotlib.artist import setp
> from matplotlib.backends.backend_agg import FigureCanvasAgg
> from matplotlib.backends.backend_cairo import FigureCanvasCairo
> import numpy as np
>
> fig = Figure()
> ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
> x = np.arange(0, 10, 0.2)
>
> ax1.plot(x, np.sin(x))
> ax1.xaxis.set_ticklabels(['Apr', 'Jul', 'Oct', '\'12', 'Apr', 'Jul'])
> setp(ax1.yaxis.get_ticklabels(), visible=False)
>
> FigureCanvasCairo(fig).print_figure('test.png')
>
>
> Results in the x-axis tick labels being significantly displaced.
> Specifically, "Oct" and "'12" are positioned far closer to the axis than
> either "Apr" or "Jul".
>
> With the AGG backend all of the labels are roughly aligned to the
> baseline of the font -- give or take a pixel.
>
> I have observed this on a Gentoo and Debian system, both running 1.1.1,
> albeit with different default fonts.
>
> Although I am not completely sure it appears as if a label contains a
> glyph that extends below the baseline, e.g. 'p' or 'J', that the label
> is forced away from the axis.
>
> Can anyone suggest a workaround for this (or explain where I am going
> wrong)?
I have been looking into this issue today and it /appears/ to be because
the Cairo backend -- or more precisely -- cairo::show_text method takes
a y-coordinate relative to the baseline. This makes sense given that
the descent of a font is a well-defined concept in Cairo (and can be
extracted via the font_extents method). However, as far as I can tell,
matplotlib expects the draw_text method to provide an absolute y-coordinate.
The result is that any text with a descender is pushed downwards
(assuming a default rotation angle). This can be visualized by
setp(ax1.xaxis.get_ticklabels(), backgroundcolor='r')
The solution is to have the draw_text method account for any descenders.
After a bit of juggling the relevant portion of draw_text becomes:
ctx = gc.ctx
ctx.new_path()
#ctx.move_to (x, y)
ctx.select_font_face (prop.get_name(),
self.fontangles [prop.get_style()],
self.fontweights[prop.get_weight()])
size = prop.get_size_in_points() * self.dpi / 72.0
ctx.set_font_size(size)
y_bearing, w, h = ctx.text_extents(s.encode("utf-8"))[1:4]
ctx.move_to(x, y - (h + y_bearing))
ctx.save()
if angle:
ctx.rotate (-angle * np.pi / 180)
#ctx.set_font_size (size)
ctx.show_text (s.encode("utf-8"))
ctx.restore()
where commented lines highlight modifications (specifically, the
movement of the set_font_size and move_to calls). In my limited testing
this fixes the aforementioned issues. Discrepancies between baselines
are now limited to +/- 1px (the same as with the AGG backend).
Eliminating these one pixel misalignments is rather difficult so long as
text rendering is performed relative to the bounding box as opposed to a
baseline.
Regards, Freddie.
|