#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 всегда будет применяться к количеству образцов, попадающих в шестиугольник, а не к отображаемому цвету… ^^ Спасибо 🙂