При попытке сделать диаграмму, bar () отсутствует 1 обязательный позиционный аргумент: 'высота' - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь сделать диаграмму, мой код

data = np.genfromtxt("ca1_data/distance.csv",
               delimiter=',',skip_header=1,
               dtype=[('Year','i4'),('Mode','U50'),('Distance','U10')],
               missing_values=['na','-'],filling_values=[0])
years = np.arange(5)
scores = [(data[(data['Mode']=='MRT') & (data['Year']>=2010)]['Distance']), 
          (data[(data['Mode']=='Bus') & (data['Year']>=2010)]['Distance'])]
labels = np.arange(2010,2015)
print(scores)
fig = plt.figure(figsize=(20,10))
ax1 = fig.add_subplot(111)
ax1.set_xticklabels(labels, fontsize=10)
plt.title(title)
plt.xlabel('Years')
plt.ylabel('Distance')
bp_dict = plt.bar(scores,10,labels=labels)
plt.show()

проблема в том, что я получил ошибку

bar() missing 1 required positional argument: 'height'

Поэтому я добавил ее вручную

bp_dict = plt.bar(scores,10,labels=labels)

Тем не менее, я получил еще одну ошибку

TypeError: unhashable type: 'numpy.ndarray'

Заранее спасибо!

Обновление: это то, что вывод результатов

[array(['10.3', '10', '9.6', '9.5', '9.2'], dtype='<U10'), array(['4.8', '4.5', '4.4', '4.3', '4.3'], dtype='<U10')]

Обновление 2: Iобновил код

scores = list(map(float, np.array(scores).flatten()))

Я получил новую ошибку после установки этого

AttributeError: Unknown property labels

1 Ответ

1 голос
/ 21 июня 2019

Для гистограммы вам нужно указать координаты x всех баров. Самый простой способ, если у вас нет явных значений x, это использовать диапазон 0, 1, 2, 3, ... и так далее. Поэтому, если у вас есть N баров для построения графика, вы можете сгенерировать N x-значений, используя range() или использовать labels в качестве аргумента x

Поэтому используйте

labels =  np.arange(2010,2015)

scores = [np.array(['10.3', '10', '9.6', '9.5', '9.2'], dtype='<U10'), 
          np.array(['4.8', '4.5', '4.4', '4.3', '4.3'], dtype='<U10')]

bp_dict = plt.bar(labels, list(map(float, scores[0])), align='edge', width=-0.4)
bp_dict = plt.bar(labels, list(map(float, scores[1])), align='edge', width=0.4)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...