Read CSV and Colored Line Plot

I am trying to plot a graph with colored markers before and after a threshold. If I use to loop to for

read the parsing of the input file over time H:M

, I can only display and color two dots. But for all points, I cannot speak.

entrance

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

      

program

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

      

Wrong exit

enter image description here

When I used the below code to read a file it showed no errors but showed an empty graph.

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

      

Changing this method displays the following error

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

      

Mistake

 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

      

+3


source to share


1 answer


you need to cast x

and y

to type np.array

before calculating above_threshold

and below_threshold

and then it works. In your version, you don't get an array of bools, but just False

and True

.

I added comma separators to your input csv file to make it work (I assume it should be there in the first place?)



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

      

enter image description here

0


source







All Articles