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
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
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()
source to share