Screenshot instructions:
Windows
Mac
Red Hat Linux
Ubuntu
Click URL instructions:
Rightclick on ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)
From: Thomas Brezinski <thomasb@ar...>  20110312 00:01:22
Attachments:
Message as HTML

Jason Stone, on 20110218 14:39, wrote: > Good afternoon all, > One last matplotlib question for the group for today. On one of my GUI > plots, I'm calling imshow on an array of data (to display it in the same way > MATLAB's imagesc command does). I'd like to add a second yaxis to the > right side of the plot that is completely dependent on the values on the > primary yaxis. Essentially, for each yaxis tick point, I'll put the > yaxis 'value' into a formula and then put the result on the second yaxis. > I did this in MATLAB by essentially overlaying a second set of axes over > the plot, but I haven't found the exact way to do it with matplotlib yet. > I've seen a few examples online, but they all use the second overlaid plot > to actually plot new data  I wouldn't be doing this. > Would I need to use the twinx (or twiny) function? > Are there examples of this on the web that I haven't found that somebody > could point me towards? Hi Jason, here's an example that does what you want, using e^x as the formula, change the paramter to fmtr to suit your needs: ax = plt.subplot(1,1,1) ax.plot(np.sin(np.linspace(0,np.pi))) ax2 = ax.twinx() ax2._sharey = ax # share both x and y fmtr = mpl.ticker.FuncFormatter(lambda x,pos: "%.2f"%np.exp(x)) ax2.yaxis.set_major_formatter(fmtr) plt.draw() best,  Paul Ivanov 314 address only used for lists, offlist direct email at: http://pirsquared.org  GPG/PGP key id: 0x0F3E28F7 Paul, I am currently doing something very similar and was hoping I could ask for a little clarification. I want to have two y axes where the ticks are in the same locations and the 2nd yaxis labels are just twice the 1st yaxis labels. When I implement your example, I don't quite understand how to ensure the ticks are at the same locations. Also, when the data changes to a new image, the 1st yaxis updates but the 2nd yaxis does not. Is there a convenient way to force both to update each time, or does the figure need to be cleared and essentially built from scratch each time. for example, with the following code: import numpy as np import matplotlib import matplotlib.colorbar as cb import matplotlib.pyplot as plt y = np.reshape(np.arange(0, 1000000, 1), (20000, 50)) test = 'hot' f1 = plt.figure(1) f1.patch.set_facecolor('#c0c0c0') ax1 = f1.add_axes([0.09, 0.15, 0.82, 0.80]) axc = f1.add_axes([0.09, 0.05, 0.82, 0.05]) im1 = ax1.imshow(y, cmap=test, aspect='auto', origin='lower') cb.Colorbar(axc, im1, orientation='horizontal') ax2 = ax1.twinx() ax2._sharey = ax1 # share both x and y fmtr = matplotlib.ticker.FuncFormatter(lambda x,pos: "%.2f"%np.exp(x)) ax2.yaxis.set_major_formatter(fmtr) plt.show() The ticks on the right are obviously at different locations compared to the left ticks. Also, if imshow was to be called a new array of data, the ticks on the right would remain the same. So is there an easy way to force the locations to be the same, and is there an easy way force the right yaxis to update each time? Thank you very much for your time and help. Thomas BEGIN PGP SIGNATURE Version: GnuPG v1.4.10 (GNU/Linux) iEYEARECAAYFAk1kEfIACgkQe+cmRQ8+KPe0vACfSMtFJ9KSRwqU34j6QevaSZqD qM0An2WHMyKisrwDIyKaCcuygrsWvZbX =OIU1 END PGP SIGNATURE  Free Software Download: Index, Search & Analyze Logs and other IT data in RealTime with Splunk. Collect, index and harness all the fast moving IT data generated by your applications, servers and devices whether physical, virtual or in the cloud. Deliver compliance at lower cost and gain new business insights. http://p.sf.net/sfu/splunkdev2dev _______________________________________________ Matplotlibusers mailing list Matplotlibusers@... <mailto:Matplotlibusers@...> https://lists.sourceforge.net/lists/listinfo/matplotlibusers 
From: JaeJoon Lee <lee.j.joon@gm...>  20110314 07:14:38

For this to work correctly, you need to manually keep two axes in sync (you can use a callback). Also note that this approach cannot be used with aspect=1 & adjustable=bbox. Another way is to use axes_grid1 toolkit. Here is the modified version of your script w/ axes_grid1. Regards, JJ import numpy as np import matplotlib import matplotlib.colorbar as cb import matplotlib.pyplot as plt y = np.reshape(np.arange(0, 1000000, 1), (20000, 50)) test = 'hot' f1 = plt.figure(1) f1.patch.set_facecolor('#c0c0c0') import mpl_toolkits.axes_grid1 as axes_grid1 # use axes_grid1.host_axes ax1 = axes_grid1.host_axes([0.09, 0.15, 0.82, 0.80]) axc = f1.add_axes([0.09, 0.05, 0.82, 0.05]) im1 = ax1.imshow(y, cmap=test, aspect='auto', origin='lower') cb.Colorbar(axc, im1, orientation='horizontal') # use twin() not twinx() ax2 = ax1.twin() # make ticklabels on the top invisible ax2.axis["top"].toggle(ticklabels=False) fmtr = matplotlib.ticker.FuncFormatter(lambda x,pos: "%.2f"% (x*2,)) ax2.yaxis.set_major_formatter(fmtr) plt.show() On Sat, Mar 12, 2011 at 9:01 AM, Thomas Brezinski <thomasb@...> wrote: > Jason Stone, on 20110218 14:39, wrote: >> Good afternoon all, >> One last matplotlib question for the group for today. On one of my GUI >> plots, I'm calling imshow on an array of data (to display it in the same >> way >> MATLAB's imagesc command does). I'd like to add a second yaxis to the >> right side of the plot that is completely dependent on the values on the >> primary yaxis. Essentially, for each yaxis tick point, I'll put the >> yaxis 'value' into a formula and then put the result on the second >> yaxis. >> I did this in MATLAB by essentially overlaying a second set of axes over >> the plot, but I haven't found the exact way to do it with matplotlib yet. >> I've seen a few examples online, but they all use the second overlaid >> plot >> to actually plot new data  I wouldn't be doing this. >> Would I need to use the twinx (or twiny) function? >> Are there examples of this on the web that I haven't found that somebody >> could point me towards? > > Hi Jason, > > here's an example that does what you want, using e^x as the > formula, change the paramter to fmtr to suit your needs: > > ax = plt.subplot(1,1,1) > ax.plot(np.sin(np.linspace(0,np.pi))) > ax2 = ax.twinx() > ax2._sharey = ax # share both x and y > fmtr = mpl.ticker.FuncFormatter(lambda x,pos: "%.2f"%np.exp(x)) > ax2.yaxis.set_major_formatter(fmtr) > plt.draw() > > best, >  > Paul Ivanov > 314 address only used for lists, offlist direct email at: > http://pirsquared.org  GPG/PGP key id: 0x0F3E28F7 > > > Paul, > I am currently doing something very similar and was hoping I could ask for a > little clarification. I want to have two y axes where the ticks are in the > same locations and the 2nd yaxis labels are just twice the 1st yaxis > labels. When I implement your example, I don't quite understand how to > ensure the ticks are at the same locations. Also, when the data changes to a > new image, the 1st yaxis updates but the 2nd yaxis does not. Is there a > convenient way to force both to update each time, or does the figure need to > be cleared and essentially built from scratch each time. > > for example, with the following code: > > import numpy as np > import matplotlib > import matplotlib.colorbar as cb > import matplotlib.pyplot as plt > > y = np.reshape(np.arange(0, 1000000, 1), (20000, 50)) > test = 'hot' > f1 = plt.figure(1) > f1.patch.set_facecolor('#c0c0c0') > ax1 = f1.add_axes([0.09, 0.15, 0.82, 0.80]) > axc = f1.add_axes([0.09, 0.05, 0.82, 0.05]) > im1 = ax1.imshow(y, cmap=test, aspect='auto', origin='lower') > cb.Colorbar(axc, im1, orientation='horizontal') > ax2 = ax1.twinx() > ax2._sharey = ax1 # share both x and y > fmtr = matplotlib.ticker.FuncFormatter(lambda x,pos: "%.2f"%np.exp(x)) > ax2.yaxis.set_major_formatter(fmtr) > plt.show() > > The ticks on the right are obviously at different locations compared to the > left ticks. Also, if imshow was to be called a new array of data, the ticks > on the right would remain the same. So is there an easy way to force the > locations to be the same, and is there an easy way force the right yaxis to > update each time? Thank you very much for your time and help. > > Thomas > > > > > BEGIN PGP SIGNATURE > Version: GnuPG v1.4.10 (GNU/Linux) > > iEYEARECAAYFAk1kEfIACgkQe+cmRQ8+KPe0vACfSMtFJ9KSRwqU34j6QevaSZqD > qM0An2WHMyKisrwDIyKaCcuygrsWvZbX > =OIU1 > END PGP SIGNATURE > >  > Free Software Download: Index, Search & Analyze Logs and other IT data in > RealTime with Splunk. Collect, index and harness all the fast moving IT > data > generated by your applications, servers and devices whether physical, > virtual > or in the cloud. Deliver compliance at lower cost and gain new business > insights. http://p.sf.net/sfu/splunkdev2dev > _______________________________________________ > Matplotlibusers mailing list > Matplotlibusers@... > https://lists.sourceforge.net/lists/listinfo/matplotlibusers > > >  > Colocation vs. Managed Hosting > A question and answer guide to determining the best fit > for your organization  today and in the future. > http://p.sf.net/sfu/internapsfd2d > _______________________________________________ > Matplotlibusers mailing list > Matplotlibusers@... > https://lists.sourceforge.net/lists/listinfo/matplotlibusers > > 
Sign up for the SourceForge newsletter:
No, thanks