Прочитать CSV и график цветной линии

Я пытаюсь построить график с цветными маркерами до и после порогового значения. Если я использую цикл for считывания синтаксического анализа входного файла со временем H:M я могу отображать и окрашивать только две точки. Но для всех пунктов я не могу заговорить.

вход

 akdj 12:00 34515 sdfg sgqv 13:00 34626 ssfgb dfbb 13:00 14215 gghgws ajdf 13:30 14224 gdgva dsfb 13:45 25672 FW sfhh 14:00 85597 adsfb 

программа

 # ma masked array import csv import datetime as dt import numpy as np import matplotlib.pyplot as plt from matplotlib.pyplot import plot threshold = 30000 x,y = [],[] csv_reader = csv.reader(open('Count_Time.csv')) for line in csv_reader: y.append(int(line[2])) x.append(dt.datetime.strptime(line[1],'%H:%M')) #plt.figure() plt.plot(x,y, color='blue') #Add below threshold markers below_threshold = y < threshold plt.scatter(x[below_threshold], y[below_threshold], color='green') # Add above threshold markers above_threshold = np.logical_not(below_threshold) plt.scatter(x[above_threshold], y[above_threshold], color='red') plt.show() 

Неверный выход

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

Когда я использовал приведенный ниже код для чтения файла, который не отображал никаких ошибок, но показывал пустой график.

 data = np.genfromtxt('Count_Time.csv', delimiter=",") x = data[:,1] y = data[:,2] 

При изменении этого способа отображается следующая ошибка

 data = np.loadtxt('Count_Time.csv', delimiter=',', dtype='str, time, int, str') x = data[:,1] y = data[:,2] 

ошибка

  data = np.loadtxt('Count_Time.csv', delimiter=',', dtype='str, time, int, str') File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 798, in loadtxt dtype = np.dtype(dtype) TypeError: data type "time" not understood 

вам нужно повернуть x и y в тип np.array прежде чем вы вычисляете above_threshold и below_threshold , а затем он работает. В вашей версии вы не получаете массив bools, а просто False и True .

Я добавил разделители запятой к вашему вводу csv-файла, чтобы он работал (я полагаю, что он должен быть там в первую очередь?)

 import csv import datetime as dt import numpy as np import matplotlib.pyplot as plt from matplotlib.pyplot import plot threshold = 30000 x,y = [],[] csv_reader = csv.reader(open('input.csv')) for line in csv_reader: y.append(int(line[2])) x.append(dt.datetime.strptime(line[1],'%H:%M')) fig=plt.figure() below_threshold = y < threshold above_threshold = np.logical_not(below_threshold) print below_threshold # False print above_threshold # True x=np.array(x) y=np.array(y) plt.plot(x,y, color='blue') #Add below threshold markers below_threshold = y < threshold print below_threshold # [False False True True True False] plt.scatter(x[below_threshold], y[below_threshold], color='green') # Add above threshold markers above_threshold = np.logical_not(below_threshold) print above_threshold # [ True True False False False True] plt.scatter(x[above_threshold], y[above_threshold], color='red') fig.autofmt_xdate() plt.show() 

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