From: Nils W. <nw...@ia...> - 2012-02-20 15:32:34
Attachments:
image.png
|
Hi all, How can I improve the presentation of yticks for a small y range, e.g. >> y_min,y_max = ax.get_ylim() >>> y_max-y_min 8.9999999999996767e-07 I would like to avoid "+1.992 x 10^{-4}" in the attached figure. import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import ScalarFormatter formatter = ScalarFormatter(useMathText=True) formatter.set_scientific(True) formatter.set_powerlimits((-15,15)) #A = np.loadtxt('trash.dat') A = np.array([[ 1.00000000e+00, 0.00000000e+00, 1.99236400e-04], [ 2.00000000e+00, 1.00000000e+00, 2.00043800e-04], [ 3.00000000e+00, 2.00000000e+00, 2.00046000e-04], [ 4.00000000e+00, 3.00000000e+00, 2.00043900e-04]]) fig = plt.figure() ax = fig.add_subplot(111) ax.yaxis.set_major_formatter(formatter) ax.plot(A[:,1],A[:,2]) y_min,y_max = ax.get_ylim() print 'y range', y_max-y_min plt.show() Nils |
From: Gökhan S. <gok...@gm...> - 2012-02-21 02:27:55
|
Hello, Stealing a solution from -> http://old.nabble.com/scientific-notation-in-ticklabels-for-linear-plot-td29993489.html This seems to produce nicer looking y tick-labels. I tend to switch to log-scale in cases like yours, but this one provides a clean solution as well. import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import FuncFormatter def scinot(x,pos=None): if x == 0: s = '0' else: xp = int(np.floor(np.log10(np.abs(x)))) mn = x/10.**xp # Here we truncate to 2 significant digits -- may not be enough # in all cases s = '$'+str('%.3f'%mn) +'\\times 10^{'+str(xp)+'}$' return s A = np.array([[ 1.00000000e+00, 0.00000000e+00, 1.99236400e-04], [ 2.00000000e+00, 1.00000000e+00, 2.00043800e-04], [ 3.00000000e+00, 2.00000000e+00, 2.00046000e-04], [ 4.00000000e+00, 3.00000000e+00, 2.00043900e-04]]) fig = plt.figure() ax = fig.add_subplot(111) ax.plot(A[:,1],A[:,2]) ax.yaxis.set_major_formatter(FuncFormatter(scinot)) y_min,y_max = ax.get_ylim() print 'y range', y_max-y_min plt.show() On Mon, Feb 20, 2012 at 8:32 AM, Nils Wagner <nw...@ia...>wrote: > Hi all, > > How can I improve the presentation of yticks for a small y range, e.g. > > y_min,y_max = ax.get_ylim() >>> >>>> y_max-y_min >>>> >>> 8.9999999999996767e-07 > > I would like to avoid "+1.992 x 10^{-4}" in the attached figure. > > import numpy as np > import matplotlib.pyplot as plt > from matplotlib.ticker import ScalarFormatter > formatter = ScalarFormatter(useMathText=**True) > formatter.set_scientific(True) > formatter.set_powerlimits((-**15,15)) > #A = np.loadtxt('trash.dat') > A = np.array([[ 1.00000000e+00, 0.00000000e+00, 1.99236400e-04], > [ 2.00000000e+00, 1.00000000e+00, 2.00043800e-04], > [ 3.00000000e+00, 2.00000000e+00, 2.00046000e-04], > [ 4.00000000e+00, 3.00000000e+00, 2.00043900e-04]]) > > > fig = plt.figure() > ax = fig.add_subplot(111) > ax.yaxis.set_major_formatter(**formatter) > ax.plot(A[:,1],A[:,2]) > y_min,y_max = ax.get_ylim() > print 'y range', y_max-y_min > plt.show() > > > Nils > > > ------------------------------------------------------------------------------ > Try before you buy = See our experts in action! > The most comprehensive online learning library for Microsoft developers > is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, > Metro Style Apps, more. Free future releases when you subscribe now! > http://p.sf.net/sfu/learndevnow-dev2 > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > -- Gökhan |