我遇到了一堆数据文件的情况,这些数据文件在给定的时间范围内有许多样本,具体取决于系统。即,例如,在时间t = 1时,我可能有一个包含10项或20项的文件,以后在该文件中,我将始终具有相同数量的项。格式为时间,x,y,z列,并加载到numpy数组中。时间值显示了哪一帧,但如上所述,总是相同的,让我们以10为例。因此,我将有一个(10,4)numpy数组,其中时间值相同,但是文件中有很多帧,所以可以说100帧,所以实际上我有(1000,4)。我想在x轴上绘制带有时间的数据,而在y上绘制其他数据的操作,但是我不确定如何使用matplotlib中的线图方法进行绘制。通常,要同时提供x,y值,我相信我需要做一个散点图,所以我希望有一种更好的方法。我理想的情况是将具有相同时间码的每一行都视为不同的系列(因此颜色会有所不同),并且下一帧中同一行号的下一数据位(时间值)将被标记为相同的颜色,给那些良好的连续线条。我们可以查看时间列,找出有多少项目共享一个时间码,我们将其称为“ n”。示例代码:
a = numpy.loadtxt('sampledata.txt')
plt.plot(a[:0,:,n],a[:1,:1])
plt.show()
我认为这段代码表达了我的追求,尽管它行不通。
答案 0 :(得分:1)
编辑: 我希望这就是您想要的。
seaborn scatterplot可以将数据分类为具有相同代码(在这种情况下为时间代码)并为其使用相同颜色的某些组。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv(r"E:\Programming\Python\Matplotlib\timecodes.csv",
names=["time","x","y","z","code"]) #use your file
df["time"]=pd.to_datetime(df["time"]) #recognize the data as Time
df["x"]=df["time"].dt.day # I changed the data into "Date only" and imported to x column. Easier to see on graph.
#just used random numbers in y and z in my data.
sns.scatterplot("x", "y", data = df, hue = "code") #hue does the grouping
plt.show()
我在这里使用了csv文件,但是您也可以通过在参数中添加sep="\t"
来处理文本文件。我还在文件中添加了代码。如果有的话,代码可以对图中的数据进行分组,因此您不必分离或创建层次结构索引。如果要更改颜色或分组,请访问seaborn网站。
希望这会有所帮助。
答案 1 :(得分:1)
或者,我使用的方法,但是蒂姆的答案仍然是准确的。由于时间码不是日期/时间信息,因此我修改了自己的代码,将标签添加为第二列,我称之为“ p”(它们是聚合物)。
import numpy as np
import pandas as pd
datain = np.loadtxt('somefile.txt')
df = pd.DataFrame(data = datain, columns = ["t","p","x","y","z"])
ax = sns.scatterplot("t","x", data = df, hue = "p")
plt.show()
当然,如果需要,其他列也可以类似地绘制。