Phillip M. Feldman wrote:
I'd like to understand the reason why you object to piecewise-constant colormaps. I have found these to be useful for some types of plots.
It is a crude and indirect way of achieving a result that can be achieved precisely and directly using ListedColormap and BoundaryNorm, or possibly a subclass. The problem is that discretization is being done at the wrong stage.
Suppose you have data in the range 1.5 to 2.5, and you want the low third of that range to be red, the middle green, and the upper blue. If you use LinearSegmentedColormap and one of your functions to make a discrete map, then you will have divided your interval of length 1 into 256 segments, which does not allow you to specify exactly 1.5 + 1.0/3 as a transition point. You have only 8 bits of precision available.
What does allow you to specify the transitions exactly (to within the limits of double precision) is this:
cmap = ListedColormap(['r','g','b'])
norm = BoundaryNorm([1.5+1.0/3, 1.5+2.0/3], cmap.N)
Simple, readable, flexible: choose any boundaries you like, specify the colors any way you like, including pulling them out of an existing colormap. Efficient: the cmap lookup table has only as many entries as it needs, and the index into that table is calculated directly in a single step.
Now if you need autoscaling, with the boundaries calculated from vmin and vmax, then this can be done by subclassing BoundaryNorm. In both cases, after using this cmap and norm for a mappable, passing that mappable to colorbar will yield a reasonable result, because colorbar has special code to handle the BoundaryNorm.
Also, the functionality to create piecewise-constant colormaps is already provided by LinearSegmentedColormap, so "the cat is already out of the bag", so to speak.. (I created my functions mainly because I
LinearSegmentedColormap is very general, so yes, it can be used for this.
found the LinearSegmentedColormap interface painful to use. Since then,
That painfulness is exactly the reason why John Hunter added the from_list method 8 months ago (I forgot it had been there that long), and Reinier recently made it more flexible.
I have found ways to produce the plots that I need with the existing functions; some of the code isn't very pretty, but this is a secondary consideration).
You are always welcome to use functions like that in your own code; if they help you, that's fine.
Whenever possible, we want to make it easy for users to plot with pretty code, so if you believe you can't, then either you are not seeing a nice way to do something, or there really is no nice way. In the latter case, an addition or improvement to mpl code may be in order. And in the former case, improvements in documentation and/or examples may be needed.
Is there some way to find out what development tasks are underway so that duplication of effort can be avoided? If there were a list of tasks with associated names and target dates, this would be very useful. (Perhaps something like this already exists, but I have not been able to find it).
No, we operate in a very informal way. Big changes, and sometimes medium and smaller ones, are generally discussed on one of the lists, and that discussion indicates if anyone is actually working on the change. Some smaller and medium changes are simply done when a bee gets under someone's bonnet, leading to a burst of activity. I think most of us have at least short mental lists of things we would like to do, or to see done. All of us are severely constrained by time.
Also, it seems as though the HTML documentation is sometimes quite different from the doc strings. I've found the HTML easier to read because of color, italics, etc., but the content of the doc strings is sometimes better and/or quite different. It would be great if these could be harmonized.
The API html docs are built automatically from the docstrings; the rest of the docs are written manually, and that does tend to lag.
Eric Firing wrote:
Reinier Heeres wrote:
Hi Philip, all,
This work seems to overlap a lot with the recent color map changes I
except for the piece-wise constant color maps.
Exactly. And I don't think piece-wise constant maps are a good idea, so I oppose including a function to make them.
Of course we should avoid duplicate code and work, so perhaps we can
narrow it down to the piece-wise constant part? Please let me know
what you think. We should definitely add a few examples of how to use
this new code, as it might not be that clear directly. Basically the
following is the idea:
import numpy as np
import matplotlib.colors as mcol
import matplotlib.pyplot as plt
stop = mcol.LinearSegmentedColormap.from_list('stop', ['green',
# or: stop = mcol.LinearSegmentedColormap.from_list('stop', [(0,
'green'), (0.2, 'orange'), (1, 'red')])
from_list could have an API more like Phillip's, with an optional argument for the transition points instead of using the sequence of pairs. I'm not sure whether this is an improvement or not, but it has some appeal to me.
One might also argue that instead of being a static method, from_list should be renamed as a free-standing factory function in the colors namespace. Or that such an alias be created.
x = np.arange(100)
y = x.reshape((5,20))
Beside that, I think in no part of MPL we depend on scipy explicitly,
so it would be good to get rid of that. Also, your use of isinstance
should be replaced by the more generic functions in cbook.py (e.g.
On Sun, Oct 4, 2009 at 4:34 AM, Dr. Phillip M. Feldman >>> <pfeldman@...778...> wrote:
"Create patch" worked. Thanks! The output is attached.
From: Dr. Phillip M. Feldman [mailto:pfeldman@…778…]
Sent: Thursday, October 01, 2009 20:45
Unfortunately, I'm on a Windows system, and it appears that I
must use SVN's GUI interface, which does not provide a
mechanism for saving the diff to a file.
Which GUI are you using? If TortoiseSVN, you right-click on the modified
and select "Create patch..." from the TortoiseSVN menu.
View this message in context: http://www.nabble.com/proposed-change-to-colors.py-tp25691605p25734649.html
Sent from the matplotlib - devel mailing list archive at Nabble.com.