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
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
|
|
1
(2) |
2
(3) |
3
|
4
(3) |
5
(11) |
6
(3) |
7
(2) |
8
(6) |
9
(6) |
10
(8) |
11
(3) |
12
(7) |
13
(8) |
14
(5) |
15
(11) |
16
(11) |
17
(3) |
18
(2) |
19
(7) |
20
(11) |
21
(6) |
22
(5) |
23
(1) |
24
|
25
|
26
(6) |
27
(3) |
28
(8) |
29
(2) |
30
(1) |
|
2012年11月14日 Skipper Seabold <jss...@gm...>: > Hi All, > > Hoping someone can help me get a definitive answer to this question. > Is draw_if_interactive bad to have in library plotting code? I think the only issue here is the overhead of importing the whole pyplot stuff and checking every now and then for interactive mode in code which is not mainly designed for interactive use. Something that I often do is writing non interactive plotting functions or methods and then wrappers for interactive use which call draw_if_interactive ant do other fancy things. Goyo > > Based on this thread [1], we've been working under the assumption that > calling draw_if_interactive in plotting code is bad. Though I'm > skeptical that this is the takeaway that we should have. I also asked > this question on the IPython mailing list [2] since the recommendation > comes from their type of usage, but I'm still not clear. > > I'll repeat the gist of the question here. > > We have plotting functions that are designed to update a given axes. I > often work in interactive mode, and I'd like it if these functions > updated my axes in the way that I expect (and an R user doing plotting > in Python would expect). But now I'm forced to litter my user scripts > with draw_if_interactive after I call a function I expect to update a > plot - say updating a scatter plot with a regression line. Would be > harmful to just include these draw_if_interactive calls in our plot > functions. To be clear, I never have to call show or draw because I'm > working in interactive mode, so the recommendation to just call show() > at the end of a script is not what I want. > > My understanding of the pitfalls is 1) there's a performance hit to > calling draw instead of just making one call. This is moot because > we're only calling draw_if_interactive - so we assume the user is > working interactively and actually wants to do the drawing and doesn't > care about the performance hit. And 2) we are assuming that the user > has imported and is using pyplot and there are possible side effects. > A user wouldn't be using pyplot in a GUI or in some sort of embedded > plotting framework. However, my intuition says that if this is the > case, draw_if_interactive won't do anything because interactive will > be False in these cases. > > Can someone please help clear this up? Thanks, > > Skipper > > > [1] https://groups.google.com/forum/#!msg/pystatsmodels/biNlCvJPNNY/BT7bQJmOa1cJ > [2] http://python.6.n6.nabble.com/IPython-User-using-matplotlib-draw-if-interactive-in-library-code-td4991275.html > > ------------------------------------------------------------------------------ > Monitor your physical, virtual and cloud infrastructure from a single > web console. Get in-depth insight into apps, servers, databases, vmware, > SAP, cloud infrastructure, etc. Download 30-day Free Trial. > Pricing starts from 795ドル for 25 servers or applications! > http://p.sf.net/sfu/zoho_dev2dev_nov > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
On 16 November 2012 15:38, Bror Jonsson <bro...@gm...> wrote: > > Oh, I left out a line in the code, very sorry for that. Here is a full > example: > > import numpy as np > import pylab as pl > > #Generate a matrix populated with 1's > fld = np.ones((4,4)) > #Set one corner of the matrix to NaN > fld[:2,:2] = np.nan > #Plot the contourf plot of the matrix > pl.contourf(arange(4),arange(4),fld,colors='b') > #Create a mask where the NaN's are reversed. > mask = np.isnan(fld).astype(np.float) > mask[mask==0] = np.nan > #Plot the contourf of the mask > contourf(arange(4),arange(4),mask,colors='r') > > The cells with values in mask covers the cells with nan's in fld exactly: > > In [102]: print fld > Out[102]: > array([[ nan, nan, 1., 1.], > [ nan, nan, 1., 1.], > [ 1., 1., 1., 1.], > [ 1., 1., 1., 1.]]) > > > In [101]: print mask > Out[101]: > array([[ 1., 1., nan, nan], > [ 1., 1., nan, nan], > [ nan, nan, nan, nan], > [ nan, nan, nan, nan]]) > > > There are, however, a gap between the red and the blue areas in the > figure. Is there a way to make contourf plot mask so that the red patch > extends to 2,2 and covers all cells with 1's in mask? > > Many thanks! > > :-)Bror > Bror, The key to understanding this behaviour is to realise that your fld and mask values are defined at grid points, whereas contour deals with the quads that connect these grid points. If a single grid point is masked out, all 4 quads that the point is a corner of are masked out as far as contour is concerned as you cannot contour a quad that doesn't have all 4 points defined. You could solve your problem using contour but you would have to expand the mask so that each masked point [j,i] was expanded to [j-1:j+1, i-1:i+1]. I cannot think of a cunning numpy way of doing this whilst handling all the edge cases and would have to resort to explicit looping over the indices. There is a better way. From the point mask create a quad mask which is one smaller in each direction. Then use pcolor rather than contour as pcolor takes a quad-centric view of the world. Also, when dealing with masks I use numpy.ma rather than having to handle NaNs. Here is the simplest modification of your code that I can come up with to do what you want: import numpy as np import pylab as pl #Generate a matrix populated with 1's fld = np.ones((4,4)) #Set one corner of the matrix to NaN fld[:2,:2] = np.nan #Create a mask. mask = np.isnan(fld) #Expand mask so that it is a quad mask. mask = 1 - (mask[:-1,:-1] | mask[:-1,1:] | mask[1:,:-1] | mask[1:,1:]) #Create masked array. maskedArray = np.ma.array(np.zeros_like(mask), mask=mask) #Note mask is one smaller than fld in each direction. print 'fld.shape', fld.shape, 'mask.shape', mask.shape pl.contourf(np.arange(4), np.arange(4), fld, colors='b') #pcolor does what you want. Any colormap is chosen that has red as its first color. pl.pcolor(np.arange(4), np.arange(4), maskedArray, cmap='autumn') pl.show() Ian
Hi Sterling, Thanks for the help. Now we have a complete script that works as what we want: ****labels parallel with the colorbar with colorbar seperated **** By the way, is it possible to put in the gallery? from pylab import * a = np.arange(100).reshape(10,10) cbarlevel=np.arange(0,101,10) cs=contourf(a,levels=cbarlevel) cbar = colorbar() cbar.set_ticks(cbarlevel) #prepare the final label that we want cbar_label = [] for i in range(len(cbarlevel)-1): cbar_label.append(" {0}-{1}".format(cbarlevel[i],cbarlevel[i+1])) cbar.set_ticklabels(['']*len(cbarlevel)) #remove the original labels #set ticks as white; the 'length' parameter is a bit dirty solution cbar.ax.tick_params(axis='y',left='on',length=10,color='w',width=5) cbar.outline.remove() #remove the colorbar frame #add the label parallel to colorbar; 0.035 to be set by manual observation, a bit dirty solution. yloc=np.arange(0.035,0.95,0.1) for l,y in zip(cbar_label,yloc): cbar.ax.text(1,y,l,transform=cbar.ax.transAxes,ha='left') cheers, Chao On Sat, Nov 17, 2012 at 12:12 AM, Sterling Smith <sm...@fu...>wrote: > Chao, > > If you don't need the tick marks and are only annoyed by their appearance > in the colorbar, then I am pasting below our code so far setting the tick > length to 0. > > Code so far: > > from pylab import * > fig = figure(2) > fig.clear() > a = np.arange(100).reshape(10,10) > cbarlevel=np.arange(0,101,10) > contourf(a,levels=cbarlevel) > cbar = colorbar() > cbar.set_ticks((cbarlevel[1:]+cbarlevel[:-1])/2.) > > #to manipulate the range: > cbar_label = [] > for i in range(len(cbarlevel)-1): > cbar_label.append("{0}-{1}".format(cbarlevel[i],cbarlevel[i+1])) > > #Then to apply on the colorbar: > cbar.set_ticklabels(cbar_label) > > ax = fig.axes[-1] #This is not as clean as making the axes before the > colorbar and passing to the colorbar... > ax.yaxis.set_tick_params(length=0) > > > If you still want the ticks, then you might think of keeping the ticks > where you had set them originally, then placing texts (pylab.text) with the > transAxes transform, using the following script: > > > from pylab import * > fig = figure(2) > fig.clear() > a = np.arange(100).reshape(10,10) > cbarlevel=np.arange(0,101,10) > contourf(a,levels=cbarlevel) > cbar = colorbar() > #cbar.set_ticks((cbarlevel[1:]+cbarlevel[:-1])/2.) > cbar.set_ticks(cbarlevel) > > #to manipulate the range: > cbar_label = [] > for i in range(len(cbarlevel)-1): > cbar_label.append("{0}-{1}".format(cbarlevel[i],cbarlevel[i+1])) > #cbar_label.append('') > > print cbar_label > #['0-10', '10-20', '20-30', '30-40', '40-50', '50-60', '60-70', '70-80', > #'80-90', '90-100', ''] > > #Then to apply on the colorbar: > cbar.set_ticklabels(['']*len(cbarlevel)) > > ax = fig.axes[-1] > #ax.yaxis.set_tick_params(length=0) > > yloc = linspace(0,1,len(cbar_label)+1) > yloc = yloc[:-1] + yloc[1]/2. > for l,y in zip(cbar_label,yloc): > ax.text(1,y,l,transform=ax.transAxes,ha='left') > draw() > > -Sterling > > On Nov 16, 2012, at 12:58PM, Chao YUE wrote: > > > Thanks Sterling. It's a good idea. > > > > Unluckily, I lose the original ticks and the ticks appeared in the > middle. Is there any approach I can keep the original ticks while realizing > what has been shown in the figure? > > > > Chao > > > > On Fri, Nov 16, 2012 at 5:47 PM, Sterling Smith <sm...@fu...> > wrote: > > Chao, > > > > The secret is positioning your ticks. I list here an untested attempt > at putting the labels at the average of the current and next levels: > > > > cbar.set_ticks((cbarlevel[1:]+cbarlevel[:-1])/2.) > > > > Because you have less ticks, then you will want to remove the line > > > > cbar_level.append('') > > > > Hope that helps, > > Sterling > > > > On Nov 16, 2012, at 7:46AM, ChaoYue wrote: > > > > > I have a bit progress, but still not very well. > > > > > > #to have a contourf plot > > > a = np.arange(100).reshape(10,10) > > > cbarlevel=np.arange(0,101,10) > > > contourf(a,levels=cbarlevel) > > > cbar = colorbar() > > > cbar.set_ticks(cbarlevel) > > > > > > #to manipulate the range: > > > cbar_label = [] > > > for i in range(len(cbarlevel)-1): > > > cbar_label.append("{0}-{1}".format(cbarlevel[i],cbarlevel[i+1])) > > > cbar_label.append('') > > > > > > In [54]: print cbar_label > > > ['0-10', '10-20', '20-30', '30-40', '40-50', '50-60', '60-70', '70-80', > > > '80-90', '90-100', ''] > > > > > > #Then to apply on the colorbar: > > > cbar.set_ticklabels(cbar_label) > > > > > > The generated figure is attached. But how can I put the labels a > little bit > > > upward to make them parallel with the respective small rectangles in > the > > > colorbar? <http://matplotlib.1069221.n5.nabble.com/file/n39786/fig.jpg > > > > > > > > > > > > > > > > > > > > -- > > > View this message in context: > http://matplotlib.1069221.n5.nabble.com/how-to-put-colorbar-label-beside-the-handle-tp39705p39786.html > > > Sent from the matplotlib - users mailing list archive at Nabble.com. > > > > > > > ------------------------------------------------------------------------------ > > > Monitor your physical, virtual and cloud infrastructure from a single > > > web console. Get in-depth insight into apps, servers, databases, > vmware, > > > SAP, cloud infrastructure, etc. Download 30-day Free Trial. > > > Pricing starts from 795ドル for 25 servers or applications! > > > http://p.sf.net/sfu/zoho_dev2dev_nov > > > _______________________________________________ > > > Matplotlib-users mailing list > > > Mat...@li... > > > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > > > > > > > > -- > > > *********************************************************************************** > > Chao YUE > > Laboratoire des Sciences du Climat et de l'Environnement (LSCE-IPSL) > > UMR 1572 CEA-CNRS-UVSQ > > Batiment 712 - Pe 119 > > 91191 GIF Sur YVETTE Cedex > > Tel: (33) 01 69 08 29 02; Fax:01.69.08.77.16 > > > ************************************************************************************ > > > > <fig.jpg> > > -- *********************************************************************************** Chao YUE Laboratoire des Sciences du Climat et de l'Environnement (LSCE-IPSL) UMR 1572 CEA-CNRS-UVSQ Batiment 712 - Pe 119 91191 GIF Sur YVETTE Cedex Tel: (33) 01 69 08 29 02; Fax:01.69.08.77.16 ************************************************************************************