Проблема в том, что вы используете гистограмму, предназначенную для непрерывного распределения, и используете ее для дискретных данных. Для дискретных данных лучше всего создавать явные интервалы. При желании можно установить более широкие пределы, а также установить явные отметки на каждом из столбцов.
Вот пример с ячейками шириной 0,2:
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
data1 = np.random.choice(np.arange(1, 8), 200)
data2 = np.random.choice(np.arange(1, 3), 40)
fig, axs = plt.subplots(ncols=2)
for data, ax in zip([data1, data2], axs):
minx, maxx = data.min(), data.max()
plot = sns.distplot(data, bins=np.arange(minx - 0.1, maxx+ 0.2, 0.2), kde=False, ax=ax)
plot.set_xlim(minx-0.9, maxx+0.9)
plot.set_xticks(np.unique(data))
for bar in plot.patches:
h = bar.get_height()
if h != 0:
plot.text(bar.get_x() + bar.get_width() / 2,
h,
f'{h:.0f}\n',
ha='center',
va='center')
plt.show()