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
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
#!/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
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)])
pl.tick_params(labelleft=True, labelright=True)
pl.ticklabel_format(axis='y', style='plain', useOffset=False)
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"
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users