Включить приращения на 1 по оси x гистограммы / диаграммы, построенной с использованием Python

#python #histogram #boxplot

#python #гистограмма #boxplot

Вопрос:

Я пытаюсь нарисовать диаграмму на Python с variableAmount отображением оси x и Frequency отображением по оси y, как показано в приведенном ниже коде:

 import matplotlib.pyplot as plt
Frequency = [15097,1207,645,93,68,15,19,10,20,3,4,3,1,1,1,1,1,1,2]
variableAmount = ['0', '1', '2', '3', '4', '5', '6', '7', '8',
'10', '12','13','14', '15', '20', '23', '24', '26', '30'] #sample names

plt.bar(variableAmount, Frequency)
plt.set_xticks(1)
plt.set_yticks(1)

plt.xticks(variableAmount)
plt.yticks(Frequency) #This may be included or excluded as per need
plt.xlabel('Variables per method')
plt.ylabel('Frequency')
plt.show()
  

В качестве выходных данных у меня есть следующий график, и проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы иметь галочку при каждом приращении 1 по оси x. Как вы можете видеть на графике ниже, 9 и 11 отсутствуют на оси x, и я бы хотел, чтобы каждое целочисленное значение было включено от 0 до 30 по оси x.

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

Ответ №1:

Я думаю, что это невозможно сделать непосредственно на вашем графике. Но вы можете создать новую переменную для хранения новой версии вашего списка

 import matplotlib.pyplot as plt
Frequency = [15097,1207,645,93,68,15,19,10,20,3,4,3,1,1,1,1,1,1,2]
variableAmount = [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 20, 23, 24, 26, 30] #sample names
New_Frequency = []

for i in range(31):
    if i in variableAmount:
        New_Frequency.append(Frequency[variableAmount.index(i)])
    else:
        New_Frequency.append(0)

variableAmount = [i for i in range(31)]
plt.bar(variableAmount, New_Frequency)

plt.xlabel('Variables per method')
plt.ylabel('Frequency')
plt.show()
  

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

1. variableAmount = [i для i в диапазоне (31)]?? все еще не работает

2. Ошибка атрибута: модуль ‘matplotlib.pyplot’ не имеет атрибута ‘set_xticks’

3. все еще не работает variableAmount = [i for in range(31)] недопустимый синтаксис, выданный компилятором

Ответ №2:

Ваша первая проблема заключается в том, что переменная сумма представляет собой список строк. И я думаю, вам нужно определить полный список тиков для x, которые вы хотите отобразить.

Вы можете решить это с помощью:

 import matplotlib.pyplot as plt
Frequency = [15097,1207,645,93,68,15,19,10,20,3,4,3,1,1,1,1,1,1,2]
variableAmount = ['0', '1', '2', '3', '4', '5', '6', '7', '8',
'10', '12','13','14', '15', '20', '23', '24', '26', '30'] #sample names


variableAmount_int=[int(x) for x in variableAmount]
X_ticks_array=[i for i in range(min(variableAmount_int),max(variableAmount_int) 1)]

plt.bar(variableAmount_int, Frequency)
plt.xticks(X_ticks_array)
plt.xlabel('Variables per method')
plt.ylabel('Frequency')
plt.show()
  

Результат:
введите описание изображения здесь