我想在同一个图表上绘制两组数据。两组数据都有200秒的数据。数据集A(BLUE)以25Hz采样,数据集B(红色)采样为40Hz。因此,数据集A具有25 * 200 = 5000(时间,值)样本......并且数据集B具有40 * 200 = 8000(时间,值)样本。
datasets with different sample rates
正如您在上面所看到的,我已经设法使用' plot_date'在matplotlib中绘制这些图。功能。据我所知,该情节'函数不起作用,因为每个样本中(x,y)对的数量不同。我遇到的问题是xaxis的格式。我希望时间是以秒为单位的持续时间,而不是格式为hh:mm:ss的确切时间。目前,当秒数达到每分钟时,秒值会重置为零(如下面的缩小图像所示)。
如何让情节显示时间从0到20秒增加而不是显示小时:分钟:秒?
是否有private void getResponse()
{
output.Text = "You have searched for: " + "'" + search + "'";
try
{
//the value of 'search' is the product they searched for
WebClient c = new WebClient();
var data = c.DownloadString("http://localhost/api/index.php?search=" + search);
JObject o = JObject.Parse(data);
nameField.Text = o["name"].ToString();
descrField.Text = o["description"].ToString();
priceField.Text = o["price"].ToString();
quantityField.Text = o["quantity"].ToString();
dateField.Text = o["dateadded"].ToString();
}
catch
{
nameField.Text = "Product not found.";
descrField.Text = "Product not found.";
priceField.Text = "Product not found.";
quantityField.Text = "Product not found.";
dateField.Text = "Product not found.";
}
}
可以做到这一点(我已经尝试了,但无法弄明白......)?或者我是否需要以某种方式将matplotlib.dates.DateFormatter
x轴值操作为持续时间而不是确切的时间? (怎么做)?
供参考:
下面的代码是我如何将浮点值的原始csv列表(以秒为单位)转换为datetime对象,并再次转换为matplotlib日期时间对象 - 以与datetime
函数一起使用。
axes.plot_date()
感谢您的帮助/建议!
答案 0 :(得分:0)
好的,感谢ImportanceOfBeingErnst指出我的事情过于复杂......
事实证明,我真的只需要ax.plot(x,y)
函数而不是ax.plot_date(mdatetime, y)
函数。只要每个单独的迹线具有相同数量的x和y值,绘图实际上可以绘制不同长度的数据。由于数据全部以秒为单位给出,因此可以使用0作为我的“参考时间”轻松绘制。
对于其他任何挣扎于绘图持续时间而不是确切时间的人来说,你可以通过使用python的map()
函数简单地操纵“时间”(x)数据,或者更好的是列表理解来“时移”数据或转换为单个时间单位(例如,通过除以60将分钟转换为秒)。
“时间转移”可能如下所示:
# build some sample 25 Hz time data
time = range(0,1000,1)
time = [x*.04 for x in time]
# "time shift it by 5 seconds, since this data is recorded 5 seconds after the other signal
time = [x+5 for x in time]
这是我的绘图代码,对于像我这样的任何其他matplotlib初学者:)(这不会运行,因为我没有将我的变量转换为通用数据......但是它是使用matplotlib的一个简单示例。)
fig,ax = plt.subplots()
ax.grid()
ax.set_title(plotTitle)
ax.set_xlabel("time (s)")
ax.set_ylabel("value")
# begin looping over the different sets of data.
tup = 0
while (tup < len(alldata)):
outTime = alldata[tup][1].get("time")
# each signal is time shifted 5 seconds later.
# in addition each signal has different sampling frequency,
# so len(outTime) is different for almost every signal.
outTime = [x +(5*tup) for x in outTime]
for key in alldata[tup][1]:
if(key not in channelSelection):
## if we dont want to plot that data then skip it.
continue
else:
data = alldata[tup][1].get(key)
## using list comprehension to scale y values.
data = [100*x for x in data]
ax.plot(outTime,data,linestyle='solid', linewidth='1', marker='')
tup+=1
plt.show()