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

Already on GitHub? Sign in to your account

Fix bugs in stacked histograms #1706

Closed
wants to merge 2 commits into
from

Conversation

Projects
None yet
4 participants
Contributor

neggert commented Jan 26, 2013

Hi,

This is an attempt to fix both #1679 and #1631, which both came about because of the way that stacked histograms are handled, introduced in #847.

This isn't ready to go in yet, but I'm running into some problems getting it to work correctly, so I thought I'd try to get some more eyes on it.

There are two problems I'm running into:

  1. fill_between isn't actually filling
  2. fill_between seems to be screwing up autosetting the y axis limits.

Here is the image I get when I run test_hist_stacked. The two histograms are now in the proper order, fixing #1679, you can see the two problems I mentioned. The histograms should be filled and the minimum of the y-axis should be 0.

hist_stacked

Could someone a little more familiar with fill_between take a look at this?

@neggert neggert commented on the diff Jan 26, 2013

lib/matplotlib/axes.py
@@ -8218,17 +8218,11 @@ def hist(self, x, bins=10, range=None, normed=False, weights=None,
labels += [None] * (nx - len(labels))
for (patch, lbl) in zip(patches, labels):
- if patch:
- p = patch[0]
- p.update(kwargs)
- if lbl is not None:
- p.set_label(lbl)
-
- p.set_snap(False)
+ patch.update(kwargs)
+ if lbl is not None:
+ patch.set_label(lbl)
@neggert

neggert Jan 26, 2013

Contributor

Since the switch to fill_between, we're dealing with a PolyCollection rather than a list of patches. Thus, some changes here. I also put the patches from the bar histtype into a PatchCollection, so they can be treated using the same interface.

Member

dmcdougall commented Jan 26, 2013

This currently targets master. Should it instead target v1.2.x if its intent is to fix a bug?

Contributor

neggert commented Jan 26, 2013

I suppose you're correct. Let's get it working first, then I'll switch it over.

Member

WeatherGod commented Jan 28, 2013

If this changes the output type of the call to PolyCollection from a list
of patches, we can't make this go to v1.2.x branch since it would be a
change in API.

Contributor

neggert commented Jan 28, 2013

I think we can keep the API the same by just returning patches.get_paths(). I'm not particularly attached to using the collections, that's just what fill_between returns. If we can't get fill_between to behave, this doesn't matter anyway.

Member

dmcdougall commented Jan 28, 2013

I think we can keep the API the same by just returning patches.get_paths().

Actually, not only the type of the returned value needs to be the same, but the order in which they appear in the returned iterable needs to be unchanged as well.

Contributor

neggert commented Jan 28, 2013

Let's cross that bridge when we come to it. Right now, this isn't even working properly.

@NelleV NelleV commented on the diff Jan 29, 2013

lib/matplotlib/axes.py
@@ -8180,11 +8180,11 @@ def hist(self, x, bins=10, range=None, normed=False, weights=None,
x, y = y, x
if fill:
- patches.append(self.fill(x, y,
- closed=False, facecolor=c))
+ patches.append(self.fill_between(x, y, y_bottom,
+ closed=False, facecolors=c))
@NelleV

NelleV Jan 29, 2013

Contributor

PEP8 nitpick: this line is under-indented: it should be align with the opening ( of the previous line

@NelleV NelleV commented on the diff Jan 29, 2013

lib/matplotlib/axes.py
else:
- patches.append(self.fill(x, y,
- closed=False, edgecolor=c, fill=False))
+ patches.append(self.fill_between(x, y, y_bottom,
@NelleV

NelleV Jan 29, 2013

Contributor

Same here.

Contributor

neggert commented Jan 30, 2013

Closed in favor of #1723.

@neggert neggert closed this Jan 30, 2013

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment