[Matplotlib-users] Hexbin plot, PolyCollection and inconsistent facecolor values

Niklas Berliner niklas.berliner at gmail.com
Tue Apr 30 05:02:19 EDT 2019


Hi,

I am trying to change the edgecolor of some hexbin patches in a hexbin
plot. Fiddling around with it to understand how this could work, I
encountered a behaviour I cannot understand. I initially opened an issue at
seaborn here https://github.com/mwaskom/seaborn/issues/1734 . I get the
same behaviour with pure matplotlib and am now asking here for help.

Calling get_facecolors() on the PolyCollection returned by plt.hexbin gives
different results depending on the jupyter notebook cell within which the
call is made.

Here's my example (assuming the code is run in a notebook, using Python
3.6.8, NumPy 1.16.2, Matplotlib 3.0.3, Jupyter 4.4.0)

Cell 1:
-------
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
-------

Cell 2:
-------
x = np.array([1,1,1,1.5,1.5,2])
y = np.array([1,1,1,1,1,1])
-------

Cell 3:
-------
polycollection = plt.hexbin(x, y, C=np.ones(x.shape),
reduce_C_function=np.sum, extent=[1, 2, 0.5, 1.5], gridsize=3,
linewidths=1, edgecolors='face')
print(polycollection.get_facecolors())
-------
This plots three hexbins with different counts and different colours. Here,
get_facecolors() returns a (1,4) array, namely,
[[0.12156863 0.46666667 0.70588235 1.        ]]

Cell 4:
-------
print(polycollection.get_facecolors())
-------
When calling get_facecolors() again in the next cell, a (3,4) array is
returned, namely,
[[0.993248 0.906157 0.143936 1.      ]
 [0.127568 0.566949 0.550556 1.      ]
 [0.267004 0.004874 0.329415 1.      ]]


The second array seems to be the correct one I think (there are different
colors for each of the three hexbins). What is happening here? I am very
confused!

Thanks,
Niklas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20190430/ed8df340/attachment.html>


More information about the Matplotlib-users mailing list