Re: [Matplotlib-users] AxesGrid problem.
Sorry for the delay. I don't know if I ever included my software versions: Python IDLE 2.6.2 matplotlib 0.99.0 numpy 1.4.0rc1 (I was using 1.3.0) Here is more complete code. This is the only place I use matplotlib for anything so I don't think any earlier code should affect the plot. I've included the values of the input variables below and I could include all the code which gets the data and manipulates it if this would help. def plotGrid(x_dim,y_dim,z_dim,long_name,units,contours=16): This will create a frame for all the sub plots. There will be one row (subplot) per parameter. There will be one column. All plots will share their x scale (time) Each row will have its own y scale and legend from matplotlib import pyplot from mpl_toolkits.axes_grid import AxesGrid from numpy import meshgrid, transpose nrows = len(z_dim) # Number of rows print('there are',nrows,'rows') # Confirm that the number of rows is as expected. fig_h_size = 20. # figure width in inches fig_v_size = 8. # figure height in inches dev_mult = 3 # How many standard deviations to mask out. x_grid,y_grid = meshgrid(x_dim,y_dim) x_grid = transpose(x_grid) y_grid = transpose(y_grid) # Start the plotting routines DAP_figure = pyplot.figure(1,(fig_h_size,fig_v_size)) pyplot.title('Title goes here') pyplot.figtext(0.05,.5,Depth (m),rotation='vertical',verticalalignment='center') # Create a grid of axes with the AxesGrid helper class my_grid = AxesGrid(DAP_figure, 111, # Only one grid in DAP_figure nrows_ncols = (nrows,1), axes_pad = 0.0, # pad between axes in inches aspect=False, # By default (False), widths and heigths of axes in the grid are scaled independently. If True, they are scaled according to their data limits add_all=True, # Add axes to figures if True (default True) share_all=True, # xaxis yaxis of all axes are shared if True (default False) label_mode = L, # location of tick labels thaw will be displayed. 1 (only the lower left axes), L (left most and bottom most axes), or all cbar_location=right, # right or top cbar_mode=each, # None,single, or each cbar_size=2%, cbar_pad=1%, ) for i,parameter in enumerate(z_dim): z_dim[parameter] = maskDAP(z_dim[parameter],parameter,dev_mult) #Need to mask each grid ax = my_grid[i].pcolor(x_grid,y_grid,z_dim[parameter]) print('from',x_grid[0][0],'to',x_grid[-1][0]) my_grid[i].set_ylabel(long_name[parameter]) # Puts a y label on every graph. Eventually we want this labeled only once. my_grid.cbar_axes[i].colorbar(ax) my_grid.cbar_axes[i].axis[right].toggle(ticklabels=True,label=True) my_grid.cbar_axes[i].set_ylabel(units[parameter]) # Now show it pyplot.draw() pyplot.show() return x_grid, y_grid, my_grid #Useful only for debugging. There is no code after this. Here are some typical values for the inpit variables if it helps, x_dim, time in epoch seconds, is: array([125325, 1253251800, 1253253600, 1253255400, 1253257200, 1253259000, 1253260800, 1253262600, 1253264400, 1253266200, 1253268000, 1253269800, 1253271600, 1253273400, 1253275200, 1253277000, 1253278800, 1253280600, 1253282400, 1253284200, 1253286000, 1253287800, 1253289600, 1253291400, 1253293200, 1253295000, 1253296800, 1253298600, 1253300400, 1253302200, 1253304000, 1253305800, 1253307600, 1253309400, 1253311200, 1253313000, 1253314800, 1253316600, 1253318400, 1253320200, 1253322000, 1253323800, 1253325600, 1253327400, 1253329200, 1253331000, 1253332800]) y_dim, water depths in meters, is: array([ 0. , -0.1, -0.2, -0.3, -0.4, -0.5, -0.6, -0.7, -0.8, -0.9, -1. , -1.1, -1.2, -1.3, -1.4, -1.5, -1.6, -1.7, -1.8, -1.9, -2. , -2.1, -2.2, -2.3, -2.4, -2.5, -2.6, -2.7]) in the example plot below z_dim is a dictionary with three arrays, 'do','chl','turb'. as an example, z_dim['chl'] (chlorophyl) is a 2D array of the form: masked_array(data = [[-- 14.842718 14.842718 ..., 13.123892 -- --] [-- 15.0 15.0 ..., -- -- --] [-- 13.1241378212 13.1241378212 ..., -- -- --] ..., [-- 12.081481385 12.081481385 ..., 10.3037038589 -- --] [-- 11.0882356451 11.0882356451 ..., 9.95714437393 -- --] [-- 13.4448273754 13.4448273754 ..., -- -- --]], mask = [[ True False False ..., False True True] [ True False False ..., True True True] [ True False False ..., True True True] ..., [ True False False ..., False True True] [ True False False ..., False True True] [ True False False ..., True True True]], fill_value = 1e+20) Here's the plot as it stands now: [image: fgpXr.png] Thank you again for your time. On Fri, Dec 4, 2009 at 4:07 PM, Jae-Joon Lee
Re: [Matplotlib-users] AxesGrid problem.
Did you test the code in my previous post? If you want to get some help, you need to take your time to create a simple and complete example (which reproduces the problem) that others can easily test. Since I believe the problem is due to the existence of an extra axes, your example don't need to show any images. Please post a simple script that draws a blank AxesGrid and shows extra ticklabels as your current code does. Regards, -JJ On Tue, Dec 8, 2009 at 3:10 PM, Ryan Neve ryan.n...@gmail.com wrote: Sorry for the delay. I don't know if I ever included my software versions: Python IDLE 2.6.2 matplotlib 0.99.0 numpy 1.4.0rc1 (I was using 1.3.0) Here is more complete code. This is the only place I use matplotlib for anything so I don't think any earlier code should affect the plot. I've included the values of the input variables below and I could include all the code which gets the data and manipulates it if this would help. def plotGrid(x_dim,y_dim,z_dim,long_name,units,contours=16): This will create a frame for all the sub plots. There will be one row (subplot) per parameter. There will be one column. All plots will share their x scale (time) Each row will have its own y scale and legend from matplotlib import pyplot from mpl_toolkits.axes_grid import AxesGrid from numpy import meshgrid, transpose nrows = len(z_dim) # Number of rows print('there are',nrows,'rows') # Confirm that the number of rows is as expected. fig_h_size = 20. # figure width in inches fig_v_size = 8. # figure height in inches dev_mult = 3 # How many standard deviations to mask out. x_grid,y_grid = meshgrid(x_dim,y_dim) x_grid = transpose(x_grid) y_grid = transpose(y_grid) # Start the plotting routines DAP_figure = pyplot.figure(1,(fig_h_size,fig_v_size)) pyplot.title('Title goes here') pyplot.figtext(0.05,.5,Depth (m),rotation='vertical',verticalalignment='center') # Create a grid of axes with the AxesGrid helper class my_grid = AxesGrid(DAP_figure, 111, # Only one grid in DAP_figure nrows_ncols = (nrows,1), axes_pad = 0.0, # pad between axes in inches aspect=False, # By default (False), widths and heigths of axes in the grid are scaled independently. If True, they are scaled according to their data limits add_all=True, # Add axes to figures if True (default True) share_all=True, # xaxis yaxis of all axes are shared if True (default False) label_mode = L, # location of tick labels thaw will be displayed. 1 (only the lower left axes), L (left most and bottom most axes), or all cbar_location=right, # right or top cbar_mode=each, # None,single, or each cbar_size=2%, cbar_pad=1%, ) for i,parameter in enumerate(z_dim): z_dim[parameter] = maskDAP(z_dim[parameter],parameter,dev_mult) #Need to mask each grid ax = my_grid[i].pcolor(x_grid,y_grid,z_dim[parameter]) print('from',x_grid[0][0],'to',x_grid[-1][0]) my_grid[i].set_ylabel(long_name[parameter]) # Puts a y label on every graph. Eventually we want this labeled only once. my_grid.cbar_axes[i].colorbar(ax) my_grid.cbar_axes[i].axis[right].toggle(ticklabels=True,label=True) my_grid.cbar_axes[i].set_ylabel(units[parameter]) # Now show it pyplot.draw() pyplot.show() return x_grid, y_grid, my_grid #Useful only for debugging. There is no code after this. Here are some typical values for the inpit variables if it helps, x_dim, time in epoch seconds, is: array([125325, 1253251800, 1253253600, 1253255400, 1253257200, 1253259000, 1253260800, 1253262600, 1253264400, 1253266200, 1253268000, 1253269800, 1253271600, 1253273400, 1253275200, 1253277000, 1253278800, 1253280600, 1253282400, 1253284200, 1253286000, 1253287800, 1253289600, 1253291400, 1253293200, 1253295000, 1253296800, 1253298600, 1253300400, 1253302200, 1253304000, 1253305800, 1253307600, 1253309400, 1253311200, 1253313000, 1253314800, 1253316600, 1253318400, 1253320200, 1253322000, 1253323800, 1253325600, 1253327400, 1253329200, 1253331000, 1253332800]) y_dim, water depths in meters, is: array([ 0. , -0.1, -0.2, -0.3, -0.4, -0.5, -0.6, -0.7, -0.8, -0.9, -1. , -1.1, -1.2, -1.3, -1.4, -1.5, -1.6, -1.7, -1.8, -1.9, -2. , -2.1, -2.2, -2.3, -2.4, -2.5, -2.6, -2.7]) in the example plot below z_dim is a dictionary with three arrays, 'do','chl','turb'. as an example, z_dim['chl'] (chlorophyl) is a 2D array of the form: masked_array(data = [[-- 14.842718 14.842718 ..., 13.123892 -- --] [-- 15.0 15.0 ..., -- -- --] [-- 13.1241378212 13.1241378212 ..., -- -- --] ..., [--
Re: [Matplotlib-users] AxesGrid problem.
Than you for your assistance with AxesGrid. Concerning the documentation, on this page: http://matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/overview.htmit says: Name Default Description aspect True aspect of axes then a few lines below: *aspect*By default (False), widths and heigths of axes in the grid are scaled independently. If True, they are scaled according to their data limits (similar to aspect parameter in mpl). *Here is a more complete example of my code: *In the following code, x_grid and y_grid are are arrays created by meshgrid and represent time and water depth respectively. z_dim is a dictionary of one or more arrays of sensor readings corresponding to the depths and times in x_grid and y_grid. from matplotlib import pyplot from mpl_toolkits.axes_grid import AxesGrid nrows = len(z_dim) # Number of rows DAP_figure = pyplot.figure(1,(20,8)) pyplot.figtext(0.05,.5,Depth (m),rotation='vertical',verticalalignment='center') # Create a grid of axes with the AxesGrid helper class my_grid = AxesGrid(DAP_figure, 111, # Only one grid in this figure nrows_ncols = (nrows,1), # one or more rows, but only one column axes_pad = 0.0, #pad between axes in inches aspect=False, # If True, all plots are superimposed upon one another. add_all=True, # not sure why this would ever be False share_all=True, # I think this means that all axes have the same x y scales label_mode = L, # labels for depth on left and time on bottom cbar_location=right, cbar_mode=each, # each axes has a different scale cbar_size=2%, cbar_pad=1%, ) for i,parameter in enumerate(z_dim): z_dim[parameter] = maskDAP(z_dim[parameter],parameter,dev_mult) #Need to mask NaNs and outliers for each grid ax = my_grid[i].pcolor(x_grid,y_grid,z_dim[parameter]) my_grid[i].set_ylabel(long_name[parameter]) # Puts a y label on every graph. my_grid.cbar_axes[i].colorbar(ax) my_grid.cbar_axes[i].axis[right].toggle(ticklabels=True,label=True) my_grid.cbar_axes[i].set_ylabel(units[parameter]) #Puts the units on the right side of the colorbar pyplot.draw() pyplot.show() I do need a separate colorbar for each plot as they are results of different sensors all taken at the same time and depth scales. Here is what I have now: [image: wutSM.png] Which, aside from the extra scale labels on the x and y axis is getting close. Thank You for your help, -Ryan *matplotlib version:* On Thu, Dec 3, 2009 at 4:36 PM, Jae-Joon Lee lee.j.j...@gmail.com wrote: On Thu, Dec 3, 2009 at 3:40 PM, Ryan Neve ryan.n...@gmail.com wrote: I tried all sorts of things, but finally, by setting aspect=False I got it to work. In the documentation, the table says this defaults to True and the explanation of aspect below says it defaults to False. Although I don't entirely understand what is going on, I think this threw me off. So then I had this: Can you be more specific about which documentation says the default aspect is False? This may need to be fixed. Note that AxesGrid is designed for displaying images with aspect=True. Otherwise, you may better stick to the subplot.. [image: 84Kna.png] ... which looks much better, except that there are two sets of x and y axis labels? This seems to have something to do with the colorbar. I've got: To me, there is another axes underneath the AxesGrid. It is hard to tell without a complete code. label_mode = L, cbar_location=right, cbar_mode=each, cbar_size=2%, cbar_pad=0.5% Now I'm trying to get scales and labels on my colorbars. I tried: for i,parameter in enumerate(z_dim): ax = my_grid[i].pcolor(x_grid,y_grid,z_dim[parameter]) # This is the pcolor plot my_grid[i].set_ylabel('Depth') # Correctly puts a y label on every plot. cb = my_grid.cbar_axes[i].colorbar(ax) # Puts in a colorbar for this axes?s cb.set_ylabel(parameter) #It would be nice if this was on the far right next to the colorbar. I don't see it anywhere. Perhaps underneath something? The label of the colorbar is set to invisible by default (this is a bug). So, try something like my_grid.cbar_axes[i].set_ylabel(parameter) my_grid.cbar_axes[i].axis[right].toggle(ticklabels=True, label=True) [image: DPkWz.png] It looks like perhaps the colorbar axes is inside the ax axes rather than besides it? In the demo_grid_with_each_cbarhttp://matplotlib.sourceforge.net/examples/axes_grid/demo_axes_grid.htmlexample, how would you put a scale and label on the colorbar like in this plot:? [image: 58dFK.png] I can put a y_label on each contour plot, but since they all have depth, I'd like to label this only once. Is there a way to label the entire
Re: [Matplotlib-users] AxesGrid problem.
On Fri, Dec 4, 2009 at 2:49 PM, Ryan Neve ryan.n...@gmail.com wrote: Than you for your assistance with AxesGrid. Concerning the documentation, on this page: http://matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/overview.htmit says: Name Default Description aspect True aspect of axes then a few lines below: *aspect*By default (False), widths and heigths of axes in the grid are scaled independently. If True, they are scaled according to their data limits (similar to aspect parameter in mpl). ** Thanks a lot. This need to be fixed. *Here is a more complete example of my code: *In the following code, x_grid and y_grid are are arrays created by meshgrid and represent time and water depth respectively. z_dim is a dictionary of one or more arrays of sensor readings corresponding to the depths and times in x_grid and y_grid. Please, more complete example does not make any difference unless it is complete. Try the following code. This is based on the first part of your example. It will show empty axes but without extra ticklabels. Again, I think an extra axes is added to the figure somewhere in your code. And, without a complete, runnable (but simple) code, there is not much I (or others) can help. -JJ from matplotlib import pyplot from mpl_toolkits.axes_grid import AxesGrid nrows = 3 DAP_figure = pyplot.figure(1,(20,8)) pyplot.figtext(0.05,.5,Depth (m),rotation='vertical',verticalalignment='center') # Create a grid of axes with the AxesGrid helper class my_grid = AxesGrid(DAP_figure, 111, # Only one grid in this figure nrows_ncols = (nrows,1), # one or more rows, but only one column axes_pad = 0.0, #pad between axes in inches aspect=False, # If True, all plots are superimposed upon one another. add_all=True, # not sure why this would ever be False share_all=True, # I think this means that all axes have the same x y scales label_mode = L, # labels for depth on left and time on bottom cbar_location=right, cbar_mode=each, # each axes has a different scale cbar_size=2%, cbar_pad=1%, ) pyplot.draw() pyplot.show() -- Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on virtualization and cloud computing. Attend in-depth sessions from your desk. Your couch. Anywhere. http://p.sf.net/sfu/redhat-sfdev2dev___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] AxesGrid problem.
Thank You, I think I have a better understanding. In my figure, there are six axes, three for the plots: grid[i] and three for their colorbars: grid.cbar_axes[i]. I changed my code as you suggested and got something like: [image: UKM0g.png] I tried all sorts of things, but finally, by setting aspect=False I got it to work. In the documentation, the table says this defaults to True and the explanation of aspect below says it defaults to False. Although I don't entirely understand what is going on, I think this threw me off. So then I had this: [image: 84Kna.png] ... which looks much better, except that there are two sets of x and y axis labels? This seems to have something to do with the colorbar. I've got: label_mode = L, cbar_location=right, cbar_mode=each, cbar_size=2%, cbar_pad=0.5% Now I'm trying to get scales and labels on my colorbars. I tried: for i,parameter in enumerate(z_dim): ax = my_grid[i].pcolor(x_grid,y_grid,z_dim[parameter]) # This is the pcolor plot my_grid[i].set_ylabel('Depth') # Correctly puts a y label on every plot. cb = my_grid.cbar_axes[i].colorbar(ax) # Puts in a colorbar for this axes?s cb.set_ylabel(parameter) #It would be nice if this was on the far right next to the colorbar. I don't see it anywhere. Perhaps underneath something? [image: DPkWz.png] It looks like perhaps the colorbar axes is inside the ax axes rather than besides it? In the demo_grid_with_each_cbarhttp://matplotlib.sourceforge.net/examples/axes_grid/demo_axes_grid.htmlexample, how would you put a scale and label on the colorbar like in this plot:? [image: 58dFK.png] I can put a y_label on each contour plot, but since they all have depth, I'd like to label this only once. Is there a way to label the entire AxesGrid (or is that subplot?)? Thank you very much for your help, -Ryan On Wed, Dec 2, 2009 at 10:21 PM, Jae-Joon Lee lee.j.j...@gmail.com wrote: This happens because, when the AxesGrid is created, gca() is set to the last axes, which is the last colobar axes. If you use axes_grid toolkit, you'd better not use pyplot command that works on axes. Instead, use axes method directly. For example, instead of pyplot.pcolor(..) , use ax.pcolor(..). Regards, -JJ On Wed, Dec 2, 2009 at 2:18 PM, Ryan Neve ryan.n...@gmail.com wrote: Hello, I'm trying to use AxesGrid but I'm running into a problem: I can plot a single pcolor plot: [image: 58dFK.png] But when I try to use AxesGrid, my pcolor plot is ending up where I expect my colorbar to be. [image: mEbTA.png] I want to have up to 6 of these plots stacked vertically, sharing a common time axis and y (depth) scale. I'll try to simplify my code to show what I'm doing: # I have arrays x_grid and y_grid for time and water depth. # z_dim is a dictionary of arrays (one for each plot) # In the plot above it has two arrays. from matplotlib import pyplot nrows = len(z_dim) # Number of rows is the number of arrays My_figure = pyplot.figure(1,(8,8)) my_grid = AxesGrid(My_figure, 111, #Is this always 111? nrows_ncols = (nrows,1), # Always one column axes_pad = 0.1, add_all=True, share_all=True, # They all share the same time and depth scales label_mode = L, cbar_location=right, cbar_mode=each, cbar_size=7%, cbar_pad=2%, ) for row_no,parameter in enumerate(z_dim): ax = my_grid[row_no] ax = pyplot.pcolor(x_grid,y_grid,z_dim[parameter]) pyplot.draw() pyplot.show() I eventually want to end up with something like this matlab output (which I didn't generate): [image: jiIaK.png] but without the duplication of x scales. I'm new to pyplot and even after reading the documentation much of this is baffling. -Ryan -- Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on virtualization and cloud computing. Attend in-depth sessions from your desk. Your couch. Anywhere. http://p.sf.net/sfu/redhat-sfdev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on virtualization and cloud computing. Attend in-depth sessions from your desk. Your couch. Anywhere. http://p.sf.net/sfu/redhat-sfdev2dev___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] AxesGrid problem.
On Thu, Dec 3, 2009 at 3:40 PM, Ryan Neve ryan.n...@gmail.com wrote: I tried all sorts of things, but finally, by setting aspect=False I got it to work. In the documentation, the table says this defaults to True and the explanation of aspect below says it defaults to False. Although I don't entirely understand what is going on, I think this threw me off. So then I had this: Can you be more specific about which documentation says the default aspect is False? This may need to be fixed. Note that AxesGrid is designed for displaying images with aspect=True. Otherwise, you may better stick to the subplot.. [image: 84Kna.png] ... which looks much better, except that there are two sets of x and y axis labels? This seems to have something to do with the colorbar. I've got: To me, there is another axes underneath the AxesGrid. It is hard to tell without a complete code. label_mode = L, cbar_location=right, cbar_mode=each, cbar_size=2%, cbar_pad=0.5% Now I'm trying to get scales and labels on my colorbars. I tried: for i,parameter in enumerate(z_dim): ax = my_grid[i].pcolor(x_grid,y_grid,z_dim[parameter]) # This is the pcolor plot my_grid[i].set_ylabel('Depth') # Correctly puts a y label on every plot. cb = my_grid.cbar_axes[i].colorbar(ax) # Puts in a colorbar for this axes?s cb.set_ylabel(parameter) #It would be nice if this was on the far right next to the colorbar. I don't see it anywhere. Perhaps underneath something? The label of the colorbar is set to invisible by default (this is a bug). So, try something like my_grid.cbar_axes[i].set_ylabel(parameter) my_grid.cbar_axes[i].axis[right].toggle(ticklabels=True, label=True) [image: DPkWz.png] It looks like perhaps the colorbar axes is inside the ax axes rather than besides it? In the demo_grid_with_each_cbarhttp://matplotlib.sourceforge.net/examples/axes_grid/demo_axes_grid.htmlexample, how would you put a scale and label on the colorbar like in this plot:? [image: 58dFK.png] I can put a y_label on each contour plot, but since they all have depth, I'd like to label this only once. Is there a way to label the entire AxesGrid (or is that subplot?)? Does label_mode=1 do what you want? You may manually make some of the labels invisible. Please post a complete, but simple, script that reproduces your problem. Otherwise, it is hard to track down what is wrong. Also, please report what version of matplotlib you're using. The axes_grid toolkit is relatively new and some of the feature may not work in older versions. Regards, -JJ Thank you very much for your help, -Ryan On Wed, Dec 2, 2009 at 10:21 PM, Jae-Joon Lee lee.j.j...@gmail.comwrote: This happens because, when the AxesGrid is created, gca() is set to the last axes, which is the last colobar axes. If you use axes_grid toolkit, you'd better not use pyplot command that works on axes. Instead, use axes method directly. For example, instead of pyplot.pcolor(..) , use ax.pcolor(..). Regards, -JJ On Wed, Dec 2, 2009 at 2:18 PM, Ryan Neve ryan.n...@gmail.com wrote: Hello, I'm trying to use AxesGrid but I'm running into a problem: I can plot a single pcolor plot: [image: 58dFK.png] But when I try to use AxesGrid, my pcolor plot is ending up where I expect my colorbar to be. [image: mEbTA.png] I want to have up to 6 of these plots stacked vertically, sharing a common time axis and y (depth) scale. I'll try to simplify my code to show what I'm doing: # I have arrays x_grid and y_grid for time and water depth. # z_dim is a dictionary of arrays (one for each plot) # In the plot above it has two arrays. from matplotlib import pyplot nrows = len(z_dim) # Number of rows is the number of arrays My_figure = pyplot.figure(1,(8,8)) my_grid = AxesGrid(My_figure, 111, #Is this always 111? nrows_ncols = (nrows,1), # Always one column axes_pad = 0.1, add_all=True, share_all=True, # They all share the same time and depth scales label_mode = L, cbar_location=right, cbar_mode=each, cbar_size=7%, cbar_pad=2%, ) for row_no,parameter in enumerate(z_dim): ax = my_grid[row_no] ax = pyplot.pcolor(x_grid,y_grid,z_dim[parameter]) pyplot.draw() pyplot.show() I eventually want to end up with something like this matlab output (which I didn't generate): [image: jiIaK.png] but without the duplication of x scales. I'm new to pyplot and even after reading the documentation much of this is baffling. -Ryan -- Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on
[Matplotlib-users] AxesGrid problem.
Hello, I'm trying to use AxesGrid but I'm running into a problem: I can plot a single pcolor plot: [image: 58dFK.png] But when I try to use AxesGrid, my pcolor plot is ending up where I expect my colorbar to be. [image: mEbTA.png] I want to have up to 6 of these plots stacked vertically, sharing a common time axis and y (depth) scale. I'll try to simplify my code to show what I'm doing: # I have arrays x_grid and y_grid for time and water depth. # z_dim is a dictionary of arrays (one for each plot) # In the plot above it has two arrays. from matplotlib import pyplot nrows = len(z_dim) # Number of rows is the number of arrays My_figure = pyplot.figure(1,(8,8)) my_grid = AxesGrid(My_figure, 111, #Is this always 111? nrows_ncols = (nrows,1), # Always one column axes_pad = 0.1, add_all=True, share_all=True, # They all share the same time and depth scales label_mode = L, cbar_location=right, cbar_mode=each, cbar_size=7%, cbar_pad=2%, ) for row_no,parameter in enumerate(z_dim): ax = my_grid[row_no] ax = pyplot.pcolor(x_grid,y_grid,z_dim[parameter]) pyplot.draw() pyplot.show() I eventually want to end up with something like this matlab output (which I didn't generate): [image: jiIaK.png] but without the duplication of x scales. I'm new to pyplot and even after reading the documentation much of this is baffling. -Ryan -- Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on virtualization and cloud computing. Attend in-depth sessions from your desk. Your couch. Anywhere. http://p.sf.net/sfu/redhat-sfdev2dev___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] AxesGrid problem.
This happens because, when the AxesGrid is created, gca() is set to the last axes, which is the last colobar axes. If you use axes_grid toolkit, you'd better not use pyplot command that works on axes. Instead, use axes method directly. For example, instead of pyplot.pcolor(..) , use ax.pcolor(..). Regards, -JJ On Wed, Dec 2, 2009 at 2:18 PM, Ryan Neve ryan.n...@gmail.com wrote: Hello, I'm trying to use AxesGrid but I'm running into a problem: I can plot a single pcolor plot: [image: 58dFK.png] But when I try to use AxesGrid, my pcolor plot is ending up where I expect my colorbar to be. [image: mEbTA.png] I want to have up to 6 of these plots stacked vertically, sharing a common time axis and y (depth) scale. I'll try to simplify my code to show what I'm doing: # I have arrays x_grid and y_grid for time and water depth. # z_dim is a dictionary of arrays (one for each plot) # In the plot above it has two arrays. from matplotlib import pyplot nrows = len(z_dim) # Number of rows is the number of arrays My_figure = pyplot.figure(1,(8,8)) my_grid = AxesGrid(My_figure, 111, #Is this always 111? nrows_ncols = (nrows,1), # Always one column axes_pad = 0.1, add_all=True, share_all=True, # They all share the same time and depth scales label_mode = L, cbar_location=right, cbar_mode=each, cbar_size=7%, cbar_pad=2%, ) for row_no,parameter in enumerate(z_dim): ax = my_grid[row_no] ax = pyplot.pcolor(x_grid,y_grid,z_dim[parameter]) pyplot.draw() pyplot.show() I eventually want to end up with something like this matlab output (which I didn't generate): [image: jiIaK.png] but without the duplication of x scales. I'm new to pyplot and even after reading the documentation much of this is baffling. -Ryan -- Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on virtualization and cloud computing. Attend in-depth sessions from your desk. Your couch. Anywhere. http://p.sf.net/sfu/redhat-sfdev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on virtualization and cloud computing. Attend in-depth sessions from your desk. Your couch. Anywhere. http://p.sf.net/sfu/redhat-sfdev2dev___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users