|
From: Bruno P. <bru...@gm...> - 2014-06-17 18:59:43
|
Hi all, I'm trying to use imshow to plot some values which fall on the interval [0,1]. I need to use a logscale to emphasize the scales of the data. The solution I found checking some discussions was like this plt.imshow(X, interpolation='none', norm=matplotlib.colors.LogNorm()) However, I notice that the way these colors are assigned are not always the same (although my data always contains the minimum value 0.0 and the maximum 1.0). I need to have a coherent color scale to indicate the real values. Is it easier to do the color code myself? What is the proper way of tackling this problem?? It's pretty much the same problem described here, but with a logscale... http://stackoverflow.com/questions/7875688/how-can-i-create-a-standard-colorbar-for-a-series-of-plots-in-python Thank you very much! Bruno |
|
From: Eric F. <ef...@ha...> - 2014-06-17 19:20:48
|
On 2014/06/17, 8:59 AM, Bruno Pace wrote: > Hi all, > > I'm trying to use imshow to plot some values which fall on the interval > [0,1]. I need to > use a logscale to emphasize the scales of the data. The solution I found > checking some discussions was like this > > plt.imshow(X, interpolation='none', norm=matplotlib.colors.LogNorm()) > > However, I notice that the way these colors are assigned are not always > the same (although my data always contains the minimum value 0.0 and > the maximum 1.0). I need to have a coherent color scale to indicate > the real values. Is it easier to do the color code myself? What is the > proper way of tackling this problem?? Use the vmin and vmax kwargs to LogNorm, remembering that vmin must be greater than zero for a log scale. Eric > > It's pretty much the same problem described here, but with a logscale... > > http://stackoverflow.com/questions/7875688/how-can-i-create-a-standard-colorbar-for-a-series-of-plots-in-python > > > Thank you very much! > > Bruno > > > ------------------------------------------------------------------------------ > HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions > Find What Matters Most in Your Big Data with HPCC Systems > Open Source. Fast. Scalable. Simple. Ideal for Dirty Data. > Leverages Graph Analysis for Fast Processing & Easy Data Exploration > http://p.sf.net/sfu/hpccsystems > > > > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |
|
From: Bruno P. <bru...@gm...> - 2014-06-18 15:23:13
|
Ok, so using the norm=SymLogNorm I cannot distinguish the values that are exactly 0.0 from the really small ones, right? Would it be possible to make use of the set_bad method without having to use masked arrays, just combining the SymLogNorm and the set_bad? Thanks! 2014-06-17 21:20 GMT+02:00 Eric Firing <ef...@ha...>: > On 2014/06/17, 8:59 AM, Bruno Pace wrote: > > Hi all, > > > > I'm trying to use imshow to plot some values which fall on the interval > > [0,1]. I need to > > use a logscale to emphasize the scales of the data. The solution I found > > checking some discussions was like this > > > > plt.imshow(X, interpolation='none', norm=matplotlib.colors.LogNorm()) > > > > However, I notice that the way these colors are assigned are not always > > the same (although my data always contains the minimum value 0.0 and > > the maximum 1.0). I need to have a coherent color scale to indicate > > the real values. Is it easier to do the color code myself? What is the > > proper way of tackling this problem?? > > Use the vmin and vmax kwargs to LogNorm, remembering that vmin must be > greater than zero for a log scale. > > Eric > > > > > It's pretty much the same problem described here, but with a logscale... > > > > > http://stackoverflow.com/questions/7875688/how-can-i-create-a-standard-colorbar-for-a-series-of-plots-in-python > > > > > > Thank you very much! > > > > Bruno > > > > > > > ------------------------------------------------------------------------------ > > HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions > > Find What Matters Most in Your Big Data with HPCC Systems > > Open Source. Fast. Scalable. Simple. Ideal for Dirty Data. > > Leverages Graph Analysis for Fast Processing & Easy Data Exploration > > http://p.sf.net/sfu/hpccsystems > > > > > > > > _______________________________________________ > > Matplotlib-users mailing list > > Mat...@li... > > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > > > > ------------------------------------------------------------------------------ > HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions > Find What Matters Most in Your Big Data with HPCC Systems > Open Source. Fast. Scalable. Simple. Ideal for Dirty Data. > Leverages Graph Analysis for Fast Processing & Easy Data Exploration > http://p.sf.net/sfu/hpccsystems > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |
|
From: Eric F. <ef...@ha...> - 2014-06-19 19:47:59
|
On 2014/06/18, 5:23 AM, Bruno Pace wrote: > Ok, so using the norm=SymLogNorm I cannot distinguish the values that > are exactly 0.0 from the really small ones, right? Would it be possible Correct, the scale is linear for small values. > to make use of the set_bad method without having to use masked arrays, > just combining the SymLogNorm and the set_bad? No, the mask is what identifies a point as bad. If you want to distinguish zero from non-zero, no matter how small, then this is the way to do it. zm = np.ma.masked_equal(z, 0, copy=False) Now you have a masked array where the points that are exactly zero are masked. The bad color won't show up on the colorbar, however. There is no suitable place for it. It can show only the range from vmin to vmax, and a "set_over" color for values greater than vmax, and a "set_under" color for values less than vmin. Eric |
|
From: Bruno P. <bru...@gm...> - 2014-06-20 15:15:08
|
Ok! I'm getting there! I've been trying to figure out, though, how to set black - for example - for the zero values BUT interpolate also the colors linearly from black to blue in the linear region (from zero to the linear threshold). Is there a way to change the colormap like that? Thanks a lot! On 2014/06/18, 5:23 AM, Bruno Pace wrote: > Ok, so using the norm=SymLogNorm I cannot distinguish the values that > are exactly 0.0 from the really small ones, right? Would it be possible > Correct, the scale is linear for small values. to make use of the set_bad method without having to use masked arrays, > just combining the SymLogNorm and the set_bad? > No, the mask is what identifies a point as bad. If you want to distinguish zero from non-zero, no matter how small, then this is the way to do it. zm = np.ma.masked_equal(z, 0, copy=False) Now you have a masked array where the points that are exactly zero are masked. The bad color won't show up on the colorbar, however. There is no suitable place for it. It can show only the range from vmin to vmax, and a "set_over" color for values greater than vmax, and a "set_under" color for values less than vmin. Eric |