Как работает аргумент C в hexbin (Matplotlib, python)

#python #matplotlib

Вопрос:

Я столкнулся с, вероятно, глупой проблемой в matplotlib, используя hexbin (https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.hexbin.html) с весами (аргумент C=).

Когда я заполняю аргумент C, меняется не только цвет вывода, но и форма. Вот очень простой фрагмент кода, воспроизводящий поведение:

 npts = int(2e5)

# Create a random distribution and another one as it perturbation
x1 = np.random.randint(0,3000,npts)
x2 = x1   np.random.normal(loc=0,scale=75,size=npts)

# Same for the second axis variable
y1 = np.random.randint(280,310,npts)
y2 = y1   np.random.normal(loc=0,scale=2,size=npts)

# Plot
fig, axes = plt.subplots(2,1)
ax = axes[0]
ax.hexbin(y2-y1,x1,mincnt=1,extent=[-8,8,0,3000], gridsize=150) 
#
ax = axes[1]
res = ax.hexbin(y2-y1,x1,C=x1,mincnt=1,extent=[-8,8,0,3000], gridsize=150)

fig.savefig(f"hexbin_weights.png")
plt.show()
 

И соответствующий вывод:
Вывод фрагмента

Насколько я понимаю, поскольку координаты точек x и y идентичны, должен измениться только цвет на двух участках. Однако это явно не так.

Кто-нибудь имеет представление, почему это происходит ?

Комментарии:

1. Вы установили значение mincount равным 1, а x1 имеет небольшие значения, поэтому количество в разреженных ячейках никогда не достигает 1, поэтому ячейка не заполняется.

2. Это помогает решить проблему ! Я предположил, что mincnt всегда будет применяться к количеству образцов, попадающих в шестиугольник, а не к отображаемому цвету… ^^ Спасибо 🙂