Вернуть ноль в Counter(df[column])

Строю график распределения частоты выборов тех или иных вариантов ответа. ТИпа сколько выбрано единиц, двоек, троек, четверок.

 def autolabel(rects, labels=None, height_factor=1.01):
    for i, rect in enumerate(rects):
        height = rect.get_height()
        if labels is not None:
            try:
                label = labels[i]
            except (TypeError, KeyError):
                label = ' '
        else:
            label = '%d' % int(height)
        ax.text(rect.get_x() + rect.get_width()/2., height_factor*height,
                '{}'.format(label),
                ha='center', va='bottom')



for index, column in enumerate(df.columns):
    array_counts = Counter(df[column])
    x, y = [], []
    metki = ('вариант 1', 'вариант 2', 'вариант 3', 'вариант 4')
    for m in metki:
        if not array_counts.get(m, 0):
            array_counts[m] = 0
    sns.set_style('whitegrid')
    for key, value in array_counts.items():
        x.append(key);
        y.append(value)
    plt.figure(figsize=(6, 3.5))
    b = sns.color_palette("ch:start=.2,rot=-.3")

    kwargs = {'alpha': 0.9, 'linestyle': '-', 'linewidth': 0.5, 'edgecolor': 'black'}
    ax = sns.barplot(x=x, y=y, data=df,
                     palette=b, **kwargs)
   # plt.title("{}".format(str(column)))
    plt.title('\n'.join(wrap("{}".format(str(column)),60)))
    autolabel(ax.patches, height_factor=1.01)

    plt.xlim(-1, 4)
    plt.rcParams.update({'font.size': 10})
    plt.rc('axes', titlesize=10)
    N = 4

    ind = np.arange(N)

    plt.xticks(ind, metki, rotation=60)
    plt.tight_layout()
    ax.spines["top"].set_visible(False)
    ax.spines["right"].set_visible(False)
    ax.spines["bottom"].set_visible(True)
    ax.spines["left"].set_visible(True)
    # plt.axis('off')

Так получается, что если один из вариантов набрал ноль выборов, то график смещается- по этому столбцу выводится не ноль выборов, как нужно, а количество выборов следующего за ним варианта. Показываю на прикрепленном рисунке. А должно быть так, что "вариант 1"- 19, "вариант 2"- 1, "вариант 3" - НОЛЬ (столбик на уровне оси и надпись "0"), вариант 4 - 72.

Надеюсь, понятно написано. Не могу заставить counter вернуть мне ноль.

Столбец данных вот:

4
1
4
4
4
4
4
4
4
4
4
2
4
4
1
4
4
4
4
4
4
4
1
4
4
4
4
1
4
4
4
4
4
4
4
4
4
4
4
1
4
1
1
4
4
4
1
4
4
1
4
1
4
4
4
1
1
4
1
4
4
4
1
4
4
4
4
4
4
1
4
4
4
4
4
4
1
4
4
4
4
4
4
4
1
4
4
1
4
4
1
4

введите сюда описание изображения


Ответы (2 шт):

Автор решения: n1tr0xs

После строки

metki = ('вариант 1', 'вариант 2', 'вариант 3', 'вариант 4')

добавьте этот код:

for m in metki:
    if not array_counts.get(m, 0):
        array_counts[m]=0
→ Ссылка
Автор решения: CrazyElf

Можно сделать так, просто перебрав метки по порядковым номерам - Counter вполне лояльно относится к обращениям за ключами, которых у него нет - возвращает 0 в таком случае:

for i, _ in enumerate(metki, 1):
    x.append(i);
    y.append(array_counts[i])

Ну или даже, наверное, можно прямо m добавлять в x, но надо пробовать. Наверное, это только Seaborn поймёт, а Matplotlib это возможно не умеет отображать, не помню.

→ Ссылка