#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()