我试图在阈值之前和之后绘制带有彩色标记的图形。如果我使用循环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
答案 0 :(得分:0)
在计算x
和y
之前,您需要将np.array
和above_threshold
转换为below_threshold
类型,然后才有效。在您的版本中,您不会获得一系列bool,只有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()