Невозможно создать гистограмму из plt.bar - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть задание, которое разрешает только matplotlib и базовый python.Я не могу создать необходимую гистограмму.Хотя анаконда определила проблемную линию, я не могу ее понять.

Источник данных находится здесь: https://data.gov.sg/dataset/bookings-for-new-flats-annual?view_id=2cdedc08-ddf6-4e0b-b279-82fdc7e678ea&resource_id=666ed30a-8344-4213-9d2e-076eeafeddd3

Скопировал пример ресурса и реплицировал его.

import numpy as np
import matplotlib.pyplot as plt  
fname = "C:\data/bookings-for-new-flats.csv"
data = np.genfromtxt('C:\data/bookings-for-new-flats.csv', 
                        skip_header=1, 
                        dtype=[('financial_year','U50'),('no_of_units','i8')], delimiter=",",
                        missing_values=['na','-'],filling_values=[0])

labels = list(set(data['financial_year']))
labels.sort()
bookings = np.arange(0,len(labels))
bookings_values = data[['financial_year','no_of_units']]

values = bookings_values['no_of_units']

units_values = {}

for i in labels:
    valuesforFY = values[bookings_values['financial_year']==i] 
    print("No.of Units in FY: " + i + " is {}".format(valuesforFY))
    #the line below is critical
    units_values[i] = valuesforFY    

barchart = plt.bar(list(units_values.keys()), list(units_values.values()), color='b')

plt.show()

Ожидал гистограмму, но получил только пустой.

Система определила эту строку как проблемную --->

barchart = plt.bar(list(units_values.keys()), list(units_values.values()), color='b')

1 Ответ

0 голосов
/ 25 декабря 2018

Проблема заключалась в чтении y-данных (значений словаря), которые представляли собой отдельные значения, заключенные в массив, и, следовательно, вы получали список массивов.

Ниже приводится решение: выполните итерацию позначения и хранить только те данные, к которым можно получить доступ, используя индекс 0 как [0].Здесь я переписываю ваш код, сначала извлекая x-значения в xdata, а затем y-значения в ydata для удобства чтения.

xdata =  list(units_values.keys())
ydata = [i[0] for i in units_values.values()]
barchart = plt.bar(xdata, ydata, color='b')

enter image description here

...