Как создать дискретный график 2D-гистограммы

Я пытаюсь построить двухмерную гистограмму, показывающую корреляцию между кодами ошибок, полученными между двумя измерениями. Значения кода ошибки варьируются от -3 до 5. Я бы хотел, чтобы гистограмма показывала полосу для каждого кода ошибки. Полосы должны увеличиваться (менять цвет) в поле, отмеченном двумя кодами ошибок, полученными за одно измерение. Я нарисовал короткий набросок здесь.

Пока у меня есть только код ниже, который, к сожалению, не дает мне желаемый сюжет. Кто-нибудь знает, как получить сюжет, как я описал выше?

data1=np.random.randint(-3,5,100)
data2=np.random.randint(-3,5,100)
fig, ax = plt.subplots()
ax.hist2d(data1, data2, bins=10)
plt.Axes.set_xlim(ax,left=-3, right=6)
plt.Axes.set_ylim(ax, bottom=-3, top=6)
plt.grid(True)
plt.show()

1 ответ

Решение

Вам нужно правильное количество bins и пределы оси, чтобы получить желаемую визуализацию. Более того, когда вы используете data1=np.random.randint(-3,5,100), наибольшее целое число, которое вы получите 4, а не 5. Ниже приведена измененная версия вашего кода.

data1=np.random.randint(-3,6,100)
data2=np.random.randint(-3,6,100)
n_bins = len(set(data1.flatten())) - 1

l = -3
r = 5

fig, ax = plt.subplots()
im = ax.hist2d(data1, data2, bins=n_bins+1)
ax.set_xlim(left=l, right=r)
ax.set_ylim(bottom=l, top=r)

shift = (im[1][1]-im[1][0])/2
plt.xticks(im[1], range(l, r+1, 1))
plt.yticks(im[1], range(l, r+1, 1))
plt.grid(True)
plt.colorbar(im[3])
plt.show()

Другие вопросы по тегам