Re: [Matplotlib-users] Animated artists not present in savefigged files
On Mon, Aug 23, 2010 at 7:59 AM, Kim Hansen slaun...@gmail.com wrote: Hi list, I am using animated artists to generate an animation, where I save each step in the anmantion as a png using the savefig method of the figure instance after drawing the animated artists on a cached background and after fig.canvas.blit. What I see on screen are the updated animated artists being drawn, but only the cached background with subplots and axes and grid is being stored in the savefig commands called after the last blit. Why is only the background saved.? The animated property tells the figure to not draw the artist on a call to figure.draw, which is wha savefig calls. This enables you to draw the background (everything but the animated artists) with a call to figure.canvas.draw, and then selectively draw your animated artists when you want. It does pose a problem for saving. The best approach is to turn off the animated property right before saving, and turn it back on as needed. Something like artists = fig.get_children() animated = dict() for artist in artists: animated[artist] = artist.get_animated() artist.set_animated(False) fig.savefig('myfig.png') for artist in artists: artist.set_animated(animated[artist]) Also, Ryan May has been working on a nice framework for animation that may help, http://github.com/dopplershift/Animation JDH -- This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Animated artists not present in savefigged files
What I use to create animations is plainly: savefig(head+str(filecode).zfill(digits)+format, dpi=205) plt.clf() filecode+=1 where filecode is the name, digits an int and format usually .png. clf() is important in order to prevent memory leaks, because otherwise mpl stores all the figures one in top of the other, consuming a lot of resources once you have a several images. To stick all of them together, I use a video editor. On Mon, Aug 23, 2010 at 2:59 PM, Kim Hansen slaun...@gmail.com wrote: Hi list, I am using animated artists to generate an animation, where I save each step in the anmantion as a png using the savefig method of the figure instance after drawing the animated artists on a cached background and after fig.canvas.blit. What I see on screen are the updated animated artists being drawn, but only the cached background with subplots and axes and grid is being stored in the savefig commands called after the last blit. Why is only the background saved.? I am using matplotlib ver. 0.99.1 and the 'TkAgg' backend on a Win XP PC. Thanks in advance, Kim -- This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Mapping fonts properly
On 08/22/2010 10:00 PM, Daniel Hyams wrote: I am searching for advice on how to handle selecting a specific font, and using that in a matplotlib figure. As a background, the font will be picked through the wx.FontDialog (common font dialog) provided by wxPython. So, what I will have is the font face (Arial, Times New Roman, Algerian, etc. etc.), the weight, the style (italic, normal) and the point size. All I want to do is create a matplotlib font that matches this, and use it in the plot. My first try was this: import matplotlib.pyplot as plt import matplotlib.font_manager as fm # this does not work. The title font is wrong. the_font = 'Century Schoolbook' fp = fm.FontProperties() fp.set_name(the_font) fp.set_size(24) plt.title('The Title that should be in Century Schoolbook',fontproperties=fp) print fp plt.show() But that didn't work. I know that Century Schoolbook is not really a font family, but in the docs it says that you can list a font there. On my RHEL5 system (at least), the full name of that font is Century Schoolbook L. You do, of course, have to match the font name exactly. You may want to experiment with using wx.Font.GetFaceName vs. wx.Font.GetFamilyString from the font chooser dialog and see if either returns the correct result. You can see the list of fonts that matplotlib found on your system by doing: from matplotlib import font_manager font_manager.fontManager.ttflist (This is not a public API -- but may help with debugging the issue here). Is the font you are hoping to match with in that list? Another thing you may want to try is deleting matplotlib's font cache, in case this font was installed after matplotlib was first run on your system. It is is in a file fontList.cache and lives in the user data area (can't remember the exact location of this on Windows off hand). The following does work, if I manually set the TrueType file explicitly: fp = fm.FontProperties() fp.set_file('c:\\Windows\Fonts\CENSCBK.TTF') fp.set_size(24) print fp plt.title('The Title that is in Century Schoolbook',fontproperties=fp) plt.show() So I guess the question ishow does one accomplish this, portably? I don't quite understand the ins and outs of fonts. p.s. I did take a stab at creating a mapping between the font names / weights / styles like this: all_fontfiles = fm.win32InstalledFonts() allfonts = fm.createFontList(all_fontfiles) fontdict = {} for f in allfonts: fontdict[(f.name http://f.name,f.style,f.weight)] = f.fname And I think I can get this to work, because this maps me to a TTF file for any name, style, and weight combination. But this seemed awfully hacky, and I don't know what problems I'll run into on other platforms (obviously, I would have get all_fontfiles above differently on each platform). If this is the only way to do it, I guess that's OK, but I thought that surely there was a better way. That's basically a stricter way of doing what the matplotlib code already does. The matplotlib lookup is actually smarter because it handles approximate nearest neighbor matches. I think the problem is more likely one of the above (an inexact name match or an out-of-date font cache). Mike -- Michael Droettboom Science Software Branch Space Telescope Science Institute Baltimore, Maryland, USA -- This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Mapping fonts properly
Thanks for your response Michael! Deleting the fontList.cache indeed solved the problem. The first sample that I gave below now works fine under both Windows and Linux; whew...I would have never known about that cache file without your help. So, should the fontList.cache file be deleted each time my app runs, in case new fonts have been installed since the last invocation? How do we keep that cache up to date? On Mon, Aug 23, 2010 at 10:12 AM, Michael Droettboom md...@stsci.eduwrote: On 08/22/2010 10:00 PM, Daniel Hyams wrote: I am searching for advice on how to handle selecting a specific font, and using that in a matplotlib figure. As a background, the font will be picked through the wx.FontDialog (common font dialog) provided by wxPython. So, what I will have is the font face (Arial, Times New Roman, Algerian, etc. etc.), the weight, the style (italic, normal) and the point size. All I want to do is create a matplotlib font that matches this, and use it in the plot. My first try was this: import matplotlib.pyplot as plt import matplotlib.font_manager as fm # this does not work. The title font is wrong. the_font = 'Century Schoolbook' fp = fm.FontProperties() fp.set_name(the_font) fp.set_size(24) plt.title('The Title that should be in Century Schoolbook',fontproperties=fp) print fp plt.show() But that didn't work. I know that Century Schoolbook is not really a font family, but in the docs it says that you can list a font there. On my RHEL5 system (at least), the full name of that font is Century Schoolbook L. You do, of course, have to match the font name exactly. You may want to experiment with using wx.Font.GetFaceName vs. wx.Font.GetFamilyString from the font chooser dialog and see if either returns the correct result. You can see the list of fonts that matplotlib found on your system by doing: from matplotlib import font_manager font_manager.fontManager.ttflist (This is not a public API -- but may help with debugging the issue here). Is the font you are hoping to match with in that list? Another thing you may want to try is deleting matplotlib's font cache, in case this font was installed after matplotlib was first run on your system. It is is in a file fontList.cache and lives in the user data area (can't remember the exact location of this on Windows off hand). The following does work, if I manually set the TrueType file explicitly: fp = fm.FontProperties() fp.set_file('c:\\Windows\Fonts\CENSCBK.TTF') fp.set_size(24) print fp plt.title('The Title that is in Century Schoolbook',fontproperties=fp) plt.show() So I guess the question ishow does one accomplish this, portably? I don't quite understand the ins and outs of fonts. p.s. I did take a stab at creating a mapping between the font names / weights / styles like this: all_fontfiles = fm.win32InstalledFonts() allfonts = fm.createFontList(all_fontfiles) fontdict = {} for f in allfonts: fontdict[(f.name,f.style,f.weight)] = f.fname And I think I can get this to work, because this maps me to a TTF file for any name, style, and weight combination. But this seemed awfully hacky, and I don't know what problems I'll run into on other platforms (obviously, I would have get all_fontfiles above differently on each platform). If this is the only way to do it, I guess that's OK, but I thought that surely there was a better way. That's basically a stricter way of doing what the matplotlib code already does. The matplotlib lookup is actually smarter because it handles approximate nearest neighbor matches. I think the problem is more likely one of the above (an inexact name match or an out-of-date font cache). Mike -- Michael Droettboom Science Software Branch Space Telescope Science Institute Baltimore, Maryland, USA -- This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Daniel Hyams dhy...@gmail.com -- This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Mapping fonts properly
On 08/23/2010 11:08 AM, Daniel Hyams wrote: Thanks for your response Michael! Deleting the fontList.cache indeed solved the problem. The first sample that I gave below now works fine under both Windows and Linux; whew...I would have never known about that cache file without your help. So, should the fontList.cache file be deleted each time my app runs, in case new fonts have been installed since the last invocation? How do we keep that cache up to date? The cache exists because it can take a long time to read through all of the font files on the system each time matplotlib is imported. It might be fast enough to simply stat the dates on all the files in the font directories (without reading their contents)... I don't know if experiments were done on this when the cache was originally added (that pre-dates me). Mike On Mon, Aug 23, 2010 at 10:12 AM, Michael Droettboom md...@stsci.edu mailto:md...@stsci.edu wrote: On 08/22/2010 10:00 PM, Daniel Hyams wrote: I am searching for advice on how to handle selecting a specific font, and using that in a matplotlib figure. As a background, the font will be picked through the wx.FontDialog (common font dialog) provided by wxPython. So, what I will have is the font face (Arial, Times New Roman, Algerian, etc. etc.), the weight, the style (italic, normal) and the point size. All I want to do is create a matplotlib font that matches this, and use it in the plot. My first try was this: import matplotlib.pyplot as plt import matplotlib.font_manager as fm # this does not work. The title font is wrong. the_font = 'Century Schoolbook' fp = fm.FontProperties() fp.set_name(the_font) fp.set_size(24) plt.title('The Title that should be in Century Schoolbook',fontproperties=fp) print fp plt.show() But that didn't work. I know that Century Schoolbook is not really a font family, but in the docs it says that you can list a font there. On my RHEL5 system (at least), the full name of that font is Century Schoolbook L. You do, of course, have to match the font name exactly. You may want to experiment with using wx.Font.GetFaceName vs. wx.Font.GetFamilyString from the font chooser dialog and see if either returns the correct result. You can see the list of fonts that matplotlib found on your system by doing: from matplotlib import font_manager font_manager.fontManager.ttflist (This is not a public API -- but may help with debugging the issue here). Is the font you are hoping to match with in that list? Another thing you may want to try is deleting matplotlib's font cache, in case this font was installed after matplotlib was first run on your system. It is is in a file fontList.cache and lives in the user data area (can't remember the exact location of this on Windows off hand). The following does work, if I manually set the TrueType file explicitly: fp = fm.FontProperties() fp.set_file('c:\\Windows\Fonts\CENSCBK.TTF') fp.set_size(24) print fp plt.title('The Title that is in Century Schoolbook',fontproperties=fp) plt.show() So I guess the question ishow does one accomplish this, portably? I don't quite understand the ins and outs of fonts. p.s. I did take a stab at creating a mapping between the font names / weights / styles like this: all_fontfiles = fm.win32InstalledFonts() allfonts = fm.createFontList(all_fontfiles) fontdict = {} for f in allfonts: fontdict[(f.name http://f.name,f.style,f.weight)] = f.fname And I think I can get this to work, because this maps me to a TTF file for any name, style, and weight combination. But this seemed awfully hacky, and I don't know what problems I'll run into on other platforms (obviously, I would have get all_fontfiles above differently on each platform). If this is the only way to do it, I guess that's OK, but I thought that surely there was a better way. That's basically a stricter way of doing what the matplotlib code already does. The matplotlib lookup is actually smarter because it handles approximate nearest neighbor matches. I think the problem is more likely one of the above (an inexact name match or an out-of-date font cache). Mike -- Michael Droettboom Science Software Branch Space Telescope Science Institute Baltimore, Maryland, USA -- This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net mailto:Matplotlib-users@lists.sourceforge.net
[Matplotlib-users] Labeling/distinguishing lots of curves on a single plot
Hello, I have a plot with lots of curves on it (say 30), and I would like to have some way of distinguishing the curves from each other. Just plotting them works well for a few curves because they come out as different colors unless you specify otherwise, but if you do too many you start getting repeats is there a way to have matplotlib also vary the line style that it automatically assigns? Or perhaps someone has another way of distinguishing lots of curves? Best Regards, John -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] polar plot
2010/8/20 Michael Droettboom md...@stsci.edu: Yeah, it's my issue, but I'm not happy with fixing it. Currently, matplotlib forces the xticks (i.e., the theta ticks) to be at sensible values via .set_xticks() and .set_xlabels() (projections/polar.py). I'm coding a matplotlib extension package which has to clear the axes often, but restoring the major locators, the title and stuff after clearing. It was agnostic to the specialities of polar axes so far. Why and how are you restoring the major locator? It seems like that's the issue. I don't think preventing the theta locator from being changed is something we want to do. Polar plots (by default) just set fixed theta ticks at multiples of pi/4. My package provides support for Layers in matplotlib. And the layers' data can be changed, making a complete redraw of the axes a solution much easier to implement than dealing with the fuzzy API stuff directly. I don't need high-performance. When putting axes.clear(), the locator is being reset. In cartesian coords, it happens that I want a MaxNLocator(nbins=3) or similiar from time to time, and this must be restored then. For cartesian axes, if the user does not specify another locator, I'm setting the AutoLocator(), what is the same what the (cartesian) axes does. Dealing with the case no locator set (by using matplotlib default fallback) is neither nice nor straightforward. (It has to do with complicating the calling conventions. I would have to treat the case 'ignore [x|y]locator' specially.) It would maybe be a good solution to provide some abstract Axes.get_default_locators(), being public. Each SomeClass(Axes) can define what they understand under default locator. I would rather suggest to insert a new Locator class being aware of radians. It would suffice to return tick positions dividing 2 pi into an integer number of bins. It's not necessary to cover all the peculiarities of the old historic division system into 360 parts. Perhaps using FixedLocator, rather than explicitly setting the ticks using set_xticks (as polar plots currently do) would be better. However, the locator could still be changed, not really addressing your problem. Seems that you misunderstood my problem, if I'm not misunderstanding you :-) I have no problem with a mutable locator. (But the user has normally no access to the axes, only the Stack class changes the axes.) But right, I wanted to derive it from the Locator class framework, just specialising the location. For convenience, however, we could add a locator that given n, divides 2pi into n parts. Yes, and Ben's idea is quite nice, to make this accessible also to rectangular plots. This implies some simple thoughts on the view lims to take them into account when issuing the tick locations. Accompanying would be formatters in radians and degrees with adjustable precision (no autodetect necessary). Sure. Adding a radian formatter makes sense. If we go into details let's switch to -devel maybe? Friedrich -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] plotting open symbols
2010/8/20 Benjamin Root ben.r...@ou.edu: This used to trip me up as well. However, for colors in matplotlib, None (without quotes) tells mpl to use the default color, while 'None' (typically not case-sensitive) means do not plot any color. More precise, the string 'None' translates to fully transparent black, as far as I understand. The ps backend e.g. ignores such objects when printing out then. Freidrich -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Labeling/distinguishing lots of curves on a single plot
Here are a couple of functions you might try, with a few colors and line styles I use: import itertools from pylab import * COLORS = ['#990033', '#FF', '#00FF00', '#F79E00', '#ff00ff', '#0080FF', '#FF', '#2D0668', '#2EB42E', '#ff6633', '#8000ff', '#33', '#cc0077', '#099499', '#996633', '#00'] def new_stylecolor_iter(): ## Use these to alternate markers, or use all the styles. ## Combine them into the call to 'itertools.product' and ## then add the appropriate kwargs to the call to 'plot' #markers = itertools.cycle(lines.Line2D.markers.keys()) #styles = itertools.cycle(lines.Line2D.lineStyles.keys()) ## alternate colors first, line styles second sc = itertools.product(['-', ':', '--', '-.'], COLORS) return sc def line_plot_alternate(): sc = new_stylecolor_iter() for i in xrange(0,40): style, color = sc.next() plot(xrange(0,20), randn(20), label=str(i), linewidth=3, linestyle=style, color=color) legend() if __name__ == __main__: line_plot_alternate() show() On Mon, Aug 23, 2010 at 3:06 PM, John Salvatier jsalv...@u.washington.eduwrote: Hello, I have a plot with lots of curves on it (say 30), and I would like to have some way of distinguishing the curves from each other. Just plotting them works well for a few curves because they come out as different colors unless you specify otherwise, but if you do too many you start getting repeats is there a way to have matplotlib also vary the line style that it automatically assigns? Or perhaps someone has another way of distinguishing lots of curves? Best Regards, John -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Colorbar labeling
2010/8/20 Bruce Ford br...@clearscienceinc.com: I have a grid with values ranging from exactly 0.0 and 100.0. When I plot this with colorbar, the base of the colorbar is labeled -0.0. Is this a default for 0.0...to plot it with as a negative number? Any workarounds? How sure are you that the floating point number underneath has really not set the negative bit? Maybe try to .clip() the grid positions before on the numpy level to (0.0, \infty) where 0 arises from a fresh parse of '0.0' by the interpreter, i.e., a really really zero fp number. To clip, you may also use grid *= (grid 0) or similar things of that fashion. I'm not sure if the mistake is implied my your side of the code, but i just hope this helps maybe. The Locator stuff is not soo easy. Friedrich -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Labeling/distinguishing lots of curves on a single plot
Hi John, Here is a simple way to do it. import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(111) colors = ('red','green','blue','yellow','orange') linestyles = ('-','--',':') linewidths = (0.5,2) y = np.random.randn(100,30) x = range(y.shape[0]) i = 0 for c in colors: for ls in linestyles: for lw in linewidths: ax.plot(x,y[:,i],c=c,ls=ls,lw=lw) i+=1 plt.show() On 10-08-23 03:06 PM, John Salvatier wrote: Hello, I have a plot with lots of curves on it (say 30), and I would like to have some way of distinguishing the curves from each other. Just plotting them works well for a few curves because they come out as different colors unless you specify otherwise, but if you do too many you start getting repeats is there a way to have matplotlib also vary the line style that it automatically assigns? Or perhaps someone has another way of distinguishing lots of curves? Best Regards, John -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Labeling/distinguishing lots of curves on a single plot
Thanks! On Mon, Aug 23, 2010 at 12:38 PM, Aman Thakral aman.thak...@gmail.comwrote: Hi John, Here is a simple way to do it. import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(111) colors = ('red','green','blue','yellow','orange') linestyles = ('-','--',':') linewidths = (0.5,2) y = np.random.randn(100,30) x = range(y.shape[0]) i = 0 for c in colors: for ls in linestyles: for lw in linewidths: ax.plot(x,y[:,i],c=c,ls=ls,lw=lw) i+=1 plt.show() On 10-08-23 03:06 PM, John Salvatier wrote: Hello, I have a plot with lots of curves on it (say 30), and I would like to have some way of distinguishing the curves from each other. Just plotting them works well for a few curves because they come out as different colors unless you specify otherwise, but if you do too many you start getting repeats is there a way to have matplotlib also vary the line style that it automatically assigns? Or perhaps someone has another way of distinguishing lots of curves? Best Regards, John -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d ___ Matplotlib-users mailing listmatplotlib-us...@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Labeling/distinguishing lots of curves on a single plot
By the way, I found that the following generator expression made things easy: def styles(): return ( {'c' : color, 'ls' : style, 'lw' : width} for color, style, width in itertools.product(colors, linestyles, linewidths)) then you can do something like for result, style in zip(results, styles()): pylab.plot(result[i], **style) On Mon, Aug 23, 2010 at 1:22 PM, John Salvatier jsalv...@u.washington.eduwrote: Thanks! On Mon, Aug 23, 2010 at 12:38 PM, Aman Thakral aman.thak...@gmail.comwrote: Hi John, Here is a simple way to do it. import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(111) colors = ('red','green','blue','yellow','orange') linestyles = ('-','--',':') linewidths = (0.5,2) y = np.random.randn(100,30) x = range(y.shape[0]) i = 0 for c in colors: for ls in linestyles: for lw in linewidths: ax.plot(x,y[:,i],c=c,ls=ls,lw=lw) i+=1 plt.show() On 10-08-23 03:06 PM, John Salvatier wrote: Hello, I have a plot with lots of curves on it (say 30), and I would like to have some way of distinguishing the curves from each other. Just plotting them works well for a few curves because they come out as different colors unless you specify otherwise, but if you do too many you start getting repeats is there a way to have matplotlib also vary the line style that it automatically assigns? Or perhaps someone has another way of distinguishing lots of curves? Best Regards, John -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d ___ Matplotlib-users mailing listmatplotlib-us...@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] a question about backend, matplotlib and ipython
On Mon, Aug 23, 2010 at 1:53 PM, xiaoni wang...@yahoo.com wrote: Hello, I got a problem with backend in matplotlib. I used ipython for launching the codes and the backend of matplotlib is GTKAgg. I have a code.py with a for loop for processing data, and in each iteration I read and plot and save the figures. Because there are so many figures, I set the non-interative mode and not using show() in the code. Then the memory is used more and more as the iteration number increases, and the most memory is due to write_png function. I guess that the figures (though not shown on the screen) from each iteration take the memory, and try to close the figures produced at each iteration. what I did: modify the backend to Agg in the code add close('all') before each iteration finish. This works for removing the memory problem. But a new issue arrive. After the run is finished, the ipython command window has no response to any keyboard input for a few seconds, then a warning message appear: Warning: Timeout for mainloop thread exceeded switching to nonthreaded mode (until mainloop wakes up again), and when I tried to quit ipython afterwards, it is stuck there and the ipython is crashed. But if I tried using python code.py , then it works well : no warnings. Does it mean that we can not use ipython and a backend non-GUI at the same time ? Any one would like to explain a bit ? Thanks in advance !! xiaoni xiaoni, For the way that you appear to be using ipython, it might be better to just use regular python instead. ipython is very useful for interactive systems and other advanced topics, but for a simple, loop-driven image generator, python will work just fine. As for your memory usage, doing a clf() should be helpful to keep it under control. I should also note that ipython have been known to cause memory use to grow due to the extra references it holds to the figure data, although I don't know if this is still true in the latest version that is currently being worked on. I hope this helps, Ben Root -- Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users