fix for issue #5201, empty extension triangle for vmin < 1.0#5319
fix for issue #5201, empty extension triangle for vmin < 1.0#5319arjenve wants to merge 3 commits intomatplotlib:masterfrom arjenve:master
Conversation
|
P.S. I have a testcase but it needs a privae variable of the colorbarbase, this is probably not the right way to test this. Would there be a better test for this? @cleanup
def test_colorbar_lognorm_extension():
# Issue #5201: empty triangle plotted
# for logarithmic colorbar with vmin < 1.0
ax = plt.gca()
cb = ColorbarBase(ax, norm=LogNorm(vmin=1, vmax=1000.0), orientation='vertical', extend='both')
assert_greater_equal(cb._values[0], 0.0) |
|
It's fine to use private members in tests. Sometimes that's the best way to ensure something internal is what we expect. It doesn't necessarily mean we're declaring something a public API. |
There was a problem hiding this comment.
I haven't completely thought this through, but it looks to me like using a multiplier is fine for the specific case where the problem arose--a log norm--but not for the case of a linear norm. If b[0] or b[1] is zero, the multiplier doesn't do anything at all.
It also looks like the extend logic here might not even be needed, given the extend logic in _uniform_y(). I haven't checked to see how much of that was added when the ends were modified to be of variable length.
The point of all this is just to find extended b values that will be normed to less than 0 if "under" or more than 1 if "over".
There was a problem hiding this comment.
Maybe the nicest way to handle this would be to have the norm itself define two special values, one such that its norm is less than zero, and the other such that its norm is greater than one. Then the colorbar code here could just plug in those values as needed.
There was a problem hiding this comment.
It seems changing the end values is not needed for LogNorm the plot will look fine without the multiplier. The only 2 other Norm objects that reach this code are: SymLogNorm and PowerNorm. SymLogNorm cannot be inverted, so it won't work in a colorbar like this. PowerNorm has a different problem at the lower end point, I'll look into it some more...
|
Looks like this was superseded by #7552, so can probably be closed without merging. |
This should fix the empty triangle problem for cases where vmin < 1.0.
Instead of subtracting 1, decrease the value by 10% (same for max value), this way the values cannot become negative (and the color NaN / white)