Skip to content

fix for issue #5201, empty extension triangle for vmin < 1.0 #5319

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed

fix for issue #5201, empty extension triangle for vmin < 1.0 #5319

wants to merge 3 commits into from

Conversation

arjenve
Copy link

@arjenve arjenve commented Oct 26, 2015

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)

@arjenve
Copy link
Author

arjenve commented Oct 26, 2015

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)

@mdboom
Copy link
Member

mdboom commented Oct 26, 2015

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.

@mdboom mdboom added this to the next bug fix release (2.0.1) milestone Oct 26, 2015
@mdboom
Copy link
Member

mdboom commented Oct 27, 2015

@efiring, @pelson, @leejjoon: You guys seem to have been most recently involved in colorbars. This seems fine to me (and it's passing tests), but I'm concerned about unexpected negative consequences.

@@ -674,9 +674,9 @@ def _process_values(self, b=None):

b = self.norm.inverse(self._uniform_y(self.cmap.N + 1))
if self._extend_lower():
b[0] = b[0] - 1
b[0] = 0.9 * b[0]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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".

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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...

@dstansby
Copy link
Member

Looks like this was superseded by #7552, so can probably be closed without merging.

@WeatherGod WeatherGod closed this Jan 10, 2017
@QuLogic QuLogic modified the milestones: unassigned, 2.0.1 (next bug fix release) Jan 11, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants