[Matplotlib-users] weird behaviour in ScalarMappable with ListedColormap
Hi. i am using ListedColormap with ScalarMappable, to map data ranges, without using a norm. But i dont know if what i am doing is a good thing or not. Here's the snippet: -- from matplotlib import pyplot as plt from matplotlib import colors, cm cl = [#8080FF, #purple #40C0FF, #blue #00, #cyan #00FF00, #green #00, #yellow #FF8000, #orange #FF] #red cmap = colors.ListedColormap(cl) data = np.array([np.arange(0, 5, 10, 15, 20, 25, 30, 35, 40, 45)]) sm = cm.ScalarMappable(cmap=cmap) sm.set_clim(vmin=5, vmax=40) #7 colors, max-min=35 rgba = sm.to_rgba(data, bytes=True) plt.imshow(rgba, interpolation=nearest) plt.show() -- this produces output (first letters of color list): p, p, b, c, g, y, o, r, r, r as i intend. 5=val10 -- purple, 10=val15 -- blue 15=val20 --cyan etc BUT, when the color list is much longer than here, where each specific color corresponds to some data range, somehow, sometimes the above doesn't work as expected. for example, 15=val20 -- should be cyan. but in lists with much more color numbers, value=15 sometimes produces blue. by trial error, i saw only when an epsilon is added to 15, say 15.01, data color becomes cyan. i reckon this has something to do with color number. when the number of colors in ListedColormap is not an integer power of 2 (8, 16, 32, 64..etc) the normalization in set_clim divides 0-1 into sections, which are not exactly representable in machine float, if the color number is, say, 12, 17, 20..etc. so this small differences in color-change-limits result this behaviour. so adding one extra dummy color can solve this, as it completes color number to 8 (2^3 colors). is this the case or is my guess is completely wrong ? secondly, i also would like to know the logic behind how matplotlib corresponds/maps values in whole range like i use above, with colors in color list. i digged the source but no success. say 4 colors in list and set_clim(vmin=2, vmax=4). this yields for values: below 2 -color1 2-(2.5) -color1 2.5-(3) -color2 3-(3.5) -color3 3.5 and above -color4. but how ? thanks. -- Yasin Bismillah, her hayrın başıdır. -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] wxPython Phoenix - backend_wxagg
Would you mind submitting this as a pull request? Mike On 04/27/2013 06:23 PM, Werner F. Bruhin wrote: Hi Michael, On 26/04/2013 14:40, Michael Droettboom wrote: On 04/26/2013 02:57 AM, Werner F. Bruhin wrote: Hi, Anyone can provide some info on what agg.buffer_rgba returns and maybe even some suggestion on how to resolve this issue in the wxagg backend. It returns a Python buffer object on Python 2, though on Python 3 it is a memoryview, since buffer was deprecated. Perhaps wx is also doing something different depending on the version of Python. As of Phoenix 2.9.5.81-r73873 matplot works with Phoenix, here is Robin Dunn's comment to the change he did on Phoenix with regards to the buffer handling. Quote The new buffer APIs go as far back as 2.6, IIRC, and the memoryview and bytearray object types are available in 2.7 in addition to 3.x and that I what I'm using in Phoenix. I would have expected MPL to do so also since numpy is an integral part of MPL and the new buffer interface was basically designed for and by numpy... Anyway, while double checking all this I realized that it would not be hard for me to accept old or new buffer objects for source buffers (I'll still use memoryviews or bytearrays when on the producer side of things) so try again after the next snapshot build. My unittests with array.arrrays started working after the change so I expect that MPL's rgba buffer should work too. EndQuote Enclosed is the patch for backend_wx.py and for embedding_in_wx5.py which I used for testing, in the later I use wxversion.select to force selection of a particular version - I think the distribution should still just use ensureMinimal. FYI, documentation for wxPython Phoenix are here: http://wxpython.org/Phoenix/docs/html/index.html And snapshots can be found here: http://wxpython.org/Phoenix/snapshot-builds/ I tested only on Python 2.7.2 on Windows 7. Werner -- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] wxPython Phoenix - backend_wxagg
FWIW: Matplotlib uses the older buffer interface because that is what the older version of wx used (as well as other GUI toolkits). It would be nice to move to the new memoryview objects, but all of the GUI frameworks will need to move in tandem... Mike On 04/27/2013 06:23 PM, Werner F. Bruhin wrote: Hi Michael, On 26/04/2013 14:40, Michael Droettboom wrote: On 04/26/2013 02:57 AM, Werner F. Bruhin wrote: Hi, Anyone can provide some info on what agg.buffer_rgba returns and maybe even some suggestion on how to resolve this issue in the wxagg backend. It returns a Python buffer object on Python 2, though on Python 3 it is a memoryview, since buffer was deprecated. Perhaps wx is also doing something different depending on the version of Python. As of Phoenix 2.9.5.81-r73873 matplot works with Phoenix, here is Robin Dunn's comment to the change he did on Phoenix with regards to the buffer handling. Quote The new buffer APIs go as far back as 2.6, IIRC, and the memoryview and bytearray object types are available in 2.7 in addition to 3.x and that I what I'm using in Phoenix. I would have expected MPL to do so also since numpy is an integral part of MPL and the new buffer interface was basically designed for and by numpy... Anyway, while double checking all this I realized that it would not be hard for me to accept old or new buffer objects for source buffers (I'll still use memoryviews or bytearrays when on the producer side of things) so try again after the next snapshot build. My unittests with array.arrrays started working after the change so I expect that MPL's rgba buffer should work too. EndQuote Enclosed is the patch for backend_wx.py and for embedding_in_wx5.py which I used for testing, in the later I use wxversion.select to force selection of a particular version - I think the distribution should still just use ensureMinimal. FYI, documentation for wxPython Phoenix are here: http://wxpython.org/Phoenix/docs/html/index.html And snapshots can be found here: http://wxpython.org/Phoenix/snapshot-builds/ I tested only on Python 2.7.2 on Windows 7. Werner -- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Problems with sans-serif fonts and tick labels with TeX
On 05/02/2013 03:16 PM, Paul Hobson wrote: On Thu, May 2, 2013 at 11:19 AM, Michael Droettboom md...@stsci.edu mailto:md...@stsci.edu wrote: I think the confusion here stems from the fact that you're mixing TeX and non-TeX font commands. This turns on TeX mode, so all of the text is rendered with an external TeX installation: rc('text', usetex=True) In this line, setting it to sans-serif will get passed along to TeX, but a specific ttf font name can not be used by TeX, so the second part (involving Helvetica) is ignored. And setting the default body text in TeX does not (by default) change the math font. This is (unfortunately standard TeX behavior). rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']}) This affects the font set used by matplotlib's internal mathtext renderer, and has no effect on TeX: rc('mathtext', fontset='stixsans') The solution I use when I want all sans-serif out of TeX is to use the cmbright package, which can be turned on by adding: rc('text.latex', preamble=r'\usepackage{cmbright}') That may require installing the cmbright LaTeX package if you don't already have it. I know all this stuff is confusing, but providing a flat interface over both the internal text rendering and the TeX rendering isn't really possible -- they have different views of the world -- and I'm actually not sure it's desirable. Though I wonder if we couldn't make it more obvious (somehow) when the user is mixing configuration that applies to the different contexts. Mike Mike, Thanks for the guidance. I know this stuff is complicated and the work everyone has put into it to make it work is fantastic. I now see that this was more of TeX issue than an MPL configuration issue. Your help prompted me to find this solution (similar to yours): mpl.rcParams['text.latex.preamble'] = [ r'\usepackage{siunitx}', # i need upright \micro symbols, but you need... r'\sisetup{detect-all}', # ...this to force siunitx to actually use your fonts r'\usepackage{helvet}',# set the normal font here r'\usepackage{sansmath}', # load up the sansmath so that math - helvet r'\sansmath'] # - tricky! -- gotta actually tell tex to use! Wow. That's some serious TeX voodoo magic! Want to work that into an example that we could include in the docs? Cheers, Mike -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] wxPython Phoenix - backend_wxagg
Mike, On 03/05/2013 15:14, Michael Droettboom wrote: FWIW: Matplotlib uses the older buffer interface because that is what the older version of wx used (as well as other GUI toolkits). It would be nice to move to the new memoryview objects, but all of the GUI frameworks will need to move in tandem... agg.bufferNEW_rgba or something along those lines and then GUI frameworks could move when they want/can, or would that create to big of an overhead on MPL side. Werner -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Problems with sans-serif fonts and tick labels with TeX
The solution I use when I want all sans-serif out of TeX is to use the cmbright package, which can be turned on by adding: rc('text.latex', preamble=r'\usepackage{cmbright}') That may require installing the cmbright LaTeX package if you don't already have it. I am using the sfmath package for this purpose. There is a nice comparision of the different approaches to get sans-serif math fonts at the bottom of the sfmath page: http://dtrx.de/od/tex/sfmath.html -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2 ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Problems with sans-serif fonts and tick labels with TeX
On Fri, May 3, 2013 at 6:17 AM, Michael Droettboom md...@stsci.edu wrote: On 05/02/2013 03:16 PM, Paul Hobson wrote I now see that this was more of TeX issue than an MPL configuration issue. Your help prompted me to find this solution (similar to yours): mpl.rcParams['text.latex.preamble'] = [ r'\usepackage{siunitx}', # i need upright \micro symbols, but you need... r'\sisetup{detect-all}', # ...this to force siunitx to actually use your fonts r'\usepackage{helvet}',# set the normal font here r'\usepackage{sansmath}', # load up the sansmath so that math - helvet r'\sansmath'] # - tricky! -- gotta actually tell tex to use! Wow. That's some serious TeX voodoo magic! Want to work that into an example that we could include in the docs? Cheers, Mike Gladly. I'll try to find time to cook up PR building off of the existing example over the weekend. -paul -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Problems with sans-serif fonts and tick labels with TeX
H, I'm using sfmath, too. I actually wrote a helper function to switch fonts. The preambles are the result of long-term trial and error. Normally, my preambles include some more custom commands which I left out here because they would be distracting. I always wondered why matplotlib doesn't do this kind of font switching out of the box. def setfont(font=font_default,unicode=True): r Set Matplotlibs rcParams to use LaTeX for font rendering. Revert all changes by calling rcdefault() from matplotlib. Parameters: --- font: string Helvetica Times Computer Modern usetex: Boolean Use unicode. Default: False. # Use TeX for all figure text! plt.rc('text', usetex=True) font = font.lower().replace( ,) if font == 'times': # Times font = {'family':'serif', 'serif':['Times']} preamble = r \usepackage{color} \usepackage{mathptmx} elif font == 'helvetica': # Helvetica # set serif, too. Otherwise setting to times and then # Helvetica causes an error. font = {'family':'sans-serif','sans-serif':['Helvetica'], 'serif':['cm10']} preamble = r \usepackage{color} \usepackage[tx]{sfmath} \usepackage{helvet} else: # Computer modern serif font = {'family':'serif', 'serif':['cm10']} preamble = r \usepackage{color} if unicode: # Unicode for Tex #preamble = r\usepackage[utf8]{inputenc} + preamble # inputenc should be set automatically plt.rcParams['text.latex.unicode']=True #print font, preamble plt.rc('font',**font) plt.rcParams['text.latex.preamble'] = preamble Am 03.05.2013 um 16:08 schrieb Juergen Hasch pyt...@elbonia.de: The solution I use when I want all sans-serif out of TeX is to use the cmbright package, which can be turned on by adding: rc('text.latex', preamble=r'\usepackage{cmbright}') That may require installing the cmbright LaTeX package if you don't already have it. I am using the sfmath package for this purpose. There is a nice comparision of the different approaches to get sans-serif math fonts at the bottom of the sfmath page: http://dtrx.de/od/tex/sfmath.html -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2 ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2 ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
[Matplotlib-users] How to make matplotlib use my own libpng over the systemwide
Hi, As part of building matplotlib for the one python based distribution [1], I want to always link against our own version of libpng, even if there is some other systemwide version available. I am on linux (Ubuntu). Currently, here is what I am doing: CFLAGS=-I$PNG/include -I$FREETYPE/include -I$FREETYPE/include/freetype2 LDFLAGS=-L$FREETYPE/lib -L$PNG/lib -Wl,-rpath=$PNG/lib $PYTHON/bin/python setup.py build $PYTHON/bin/python setup.py install Where $PNG and $FREETYPE points to our own versions. On a computer with no systemwide version of png, this works great. Question: 1) If I don't specify the -rpath option, then libpng.so will fail to be found at runtime. Is there any other recommended way to go around this? I don't want to use LD_LIBRARY_PATH. On a computer with systemwide version available, unfortunately the systemwide version gets picked up instead. I think it's because of this: pkg-config --libs --cflags libpng -I/usr/include/libpng12 -lpng12 so matplotlib simply calls this (right?) and uses the systemwide version. Question: 2) How do I force matplotlib to use my own version instead? I would highly appreciate any input, especially on 2). We have our own issue open for this at [2] if you are interested for the background. The merged mpl PR [3] is a little related, but doesn't answer my questions. Thanks, Ondrej [1] https://github.com/hashdist/python-hpcmp2/ [2] https://github.com/hashdist/python-hpcmp2/issues/53 [3] https://github.com/matplotlib/matplotlib/pull/1884 -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2 ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] How to make matplotlib use my own libpng over the systemwide
On Fri, May 3, 2013 at 12:41 PM, Ondřej Čertík ondrej.cer...@gmail.com wrote: Hi, As part of building matplotlib for the one python based distribution [1], I meant to say for one python distribution, not the one... Ondrej -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2 ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users