|
From: Eric F. <ef...@ha...> - 2013-01-27 06:39:40
|
On 2013/01/26 7:59 PM, Todamont wrote: > Ok, here is the distilled code that displays the scientific formatting > failure I'm trying to fix. I had to wait until the market gave me a snapshot > that triggered this bug. Here is a quick link to the image I get when I run > this program: http://imgur.com/77DUbZp What you were seeing is not an exponent, it is an offset. The attached modification tells mpl not to use an offset, and it also simplifies things by omitting the twinx, which is not needed, and by omitting all the extra fussing with formatters, likewise not needed. The algorithm for automatically choosing an offset (when an offset is desired) is known to be over-eager, but it turns out to be surprisingly difficult to come up with a better algorithm that works in a wide range of circumstances. Now, are you sure you really always want to set the y limits to exactly your y data limits? You will never have only a single point? Or only identical y values? Eric > > I greatly appreciate your help with this. Any suggestions are welcome. Also, > this code will become FOSS when it is completed. Do you think it is related > to the way I'm loading in the data with the "extent" command and then making > a subplot? I'm generating a custom heatmap of the market density for the > background, so I sort of need that... > > #!/usr/bin/env python2.7 > # coding: utf-8 > import matplotlib > from matplotlib.figure import Figure > from matplotlib.backends.backend_agg import FigureCanvasAgg > from datetime import datetime > import matplotlib.dates as dates > import matplotlib.pyplot as plt > import numpy as np > from matplotlib.ticker import ScalarFormatter, FormatStrFormatter, > FuncFormatter > import matplotlib.image as mpimg > > date = [ 734894.994583, 734894.995313, 734894.996042, 734894.997384, > 734894.998032 ] > price = [ 17.37, 17.30001, 17.30001, 17.39, 17.39 ] > graphdate = [] > for i in date: > graphdate.append(i) > > graph = np.zeros((100,100,3)) > fig=Figure(figsize=(5.5,2.4)) > pl=fig.add_subplot(111) > image=pl.imshow(graph,aspect="auto",extent=(min(date),max(date),min(price),max(price))) > fig.subplots_adjust(top=0.92,bottom=0.15,left=0.1,right=0.95) > > # add plot of value across time > pl.plot_date(zip(graphdate),zip(price),'-',color='blue',lw='1',alpha=1) > matplotlib.rcParams.update({'font.size': 5}) > > locator = dates.AutoDateLocator() > pl.set_ylim([min(price),max(price)]) > ax2=pl.twinx() > ax2.set_ylim([min(price),max(price)]) > > formatter = ScalarFormatter() > formatter.set_scientific(False) > formatter.set_powerlimits((-1000000000,10000)) > pl.yaxis.set_major_formatter(FuncFormatter(lambda x, pos: '%.0f'%x)) > pl.yaxis.set_major_formatter(formatter) > pl.yaxis.set_minor_formatter(FuncFormatter(lambda x, pos: '%.0f'%x)) > pl.yaxis.set_minor_formatter(formatter) > pl.set_autoscaley_on(False) > yfm = pl.yaxis.get_major_formatter() > yfm.set_powerlimits([ -100000000000, 10000]) > > ax2.yaxis.set_major_formatter(formatter) > ax2.yaxis.set_major_formatter(ScalarFormatter(useOffset=False)) > ax2.yaxis.set_major_formatter(FuncFormatter(lambda x, pos: '%.0f'%x)) > ax2.yaxis.set_major_formatter(formatter) > ax2.yaxis.set_minor_formatter(ScalarFormatter(useOffset=False)) > ax2.yaxis.set_minor_formatter(FuncFormatter(lambda x, pos: '%.0f'%x)) > ax2.yaxis.set_major_formatter(formatter) > ax2.set_autoscaley_on(False) > yfm = ax2.yaxis.get_major_formatter() > yfm.set_powerlimits([ -100000000000, 10000]) > > period = 298; # duration in seconds for this graph > seconds = dates.SecondLocator(interval=30) # plot by 30-second increment > secondsFmt = dates.DateFormatter('%-I:%M:%S%P',tz=None) > pl.xaxis.set_major_locator(seconds) > pl.xaxis.set_major_formatter(secondsFmt) > > labels = pl.get_xticklabels() > for label in labels: > label.set_rotation(45) > > pl.xaxis.grid(which='major',color='white', linestyle='--', linewidth=0.5, > alpha=0.15) > pl.xaxis.grid(which='minor',color='white', linestyle='--', linewidth=0.5, > alpha=0.15) > pl.yaxis.grid(which='major',color='white', linestyle='--', linewidth=0.5, > alpha=0.15) > pl.yaxis.grid(which='minor',color='white', linestyle='--', linewidth=0.5, > alpha=0.15) > > canvas=FigureCanvasAgg(fig) > bigName = "sci_formatting_fail.png" # image name > canvas.print_figure(bigName,dpi=200) # create date/timestamped file > print "grapher completed" > > > > -- > View this message in context: http://matplotlib.1069221.n5.nabble.com/Matplotlib-INSISTS-on-using-scientific-notation-how-do-I-make-it-STOP-tp40320p40326.html > Sent from the matplotlib - users mailing list archive at Nabble.com. > > ------------------------------------------------------------------------------ > Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > MVPs and experts. ON SALE this month only -- learn more at: > http://p.sf.net/sfu/learnnow-d2d > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |