Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用matplotlib python从文件数据到打印的条件_Python_Numpy_Plot_Np_Jmathplot - Fatal编程技术网

使用matplotlib python从文件数据到打印的条件

使用matplotlib python从文件数据到打印的条件,python,numpy,plot,np,jmathplot,Python,Numpy,Plot,Np,Jmathplot,我有一个文件中的数据。看起来是这样的: 08:00,user1,1 08:10,user3,2 08:15,empty,0 .... 如何在x轴上用小时和y轴上的用户绘制二进制数据。用户将根据用户使用不同的标记来表示。例如,user1表示为*,user3表示为o。对于用户,y轴是1,对于空轴是0。 用户名后的数字(在文本文件中)用于决定 在条件语句中,它将是哪个标记 这是我想做的一张照片 您可以使用np.recfromcsv加载文件。然后,我们将时间列转换为datetime对象

我有一个文件中的数据。看起来是这样的:

08:00,user1,1   
08:10,user3,2   
08:15,empty,0  
....
如何在
x轴
上用小时和
y轴
上的用户绘制二进制数据。用户将根据用户使用不同的标记来表示。例如,
user1
表示为
*
user3
表示为
o
。对于用户,
y轴
1
,对于空轴是
0
。 用户名后的数字(在文本文件中)用于决定 在条件语句中,它将是哪个标记

这是我想做的一张照片


您可以使用np.recfromcsv加载文件。然后,我们将时间列转换为datetime对象,并为其定义一个
convtime
函数。然后我们使用此函数读取CSV文件

import numpy as np
import matplotlib.pyplot as plt
convtime = lambda x: datetime.datetime.strptime(x, "%H:%M")
all_records = np.recfromcsv("myfilename.csv", names=["time", "user", "val"], converters={0:convtime}) # This says parse column 0 using the convtime function
请注意,由于我们只将时间部分指定给了
datetime
,因此它将假定日期为1900年1月1日。如果您愿意,您可以添加相关日期

现在,绘制数据。这给我们带来了一个奇怪的问题,matplotlib只能对所有正在绘制的点使用一个符号。不幸的是,这意味着我们必须使用for循环。首先,让我们为每个用户的符号和颜色定义
dict
s:

symbols = {'user1':'*', 'user3':'o', 'empty':'x'}
colours = {'user1':'blue', 'user3':'red', 'empty':'orange'}
for rec in all_records:
    plt.scatter(rec['time'], rec['val'], c=colours[rec['user']], marker=symbols[rec['user']])
差不多了。我们仍然怀念传说。这种for循环的一个缺点是,文件中的每一行都会在图例中创建一个条目。我们通过创建一个自定义的传奇来克服这一点

import matplotlib.lines as mlines
legend_list = []
for user in symbols.keys():
    legend_list.append(mlines.Line2D([], [], color=colours[user], marker=symbols[user], ls='none', label=user))
plt.legend(loc='upper right', handles=legend_list)
plt.show()
就是这样!如果绘图被压扁,则使用
plt.xlim()
根据您的喜好调整限制