【问题标题】:How to plot event frequency using datetime array in matlab如何在matlab中使用日期时间数组绘制事件频率
【发布时间】:2015-06-13 13:18:22
【问题描述】:

我有一个日期时间格式的值数组。每个值代表在指定日期和时间发生的事件。如何在每天的事件、每月的事件等中绘制事件频率?

我已经设法使用 histogram(mydata.Hour) 绘制一天中每小时的事件

感谢您的回答!

编辑:以下第一个答案后的一些精度:

是的,这就是我已经使用直方图和 data.Hour 所做的。但是,我想做的是计算每天的平均事件数,并在我的事件所在的整个时间段内绘制它。

这是一个工作示例:

% generating 500 random events
dates = datetime(now-1000*rand(500,1),'convertfrom','datenum');

figure;
edges = -0.5:23.5;
histogram(dates.Hour,edges)
title('Events per hours of the day')
xlim ([-0.5 23.5])
ax1 = gca;
ax1.XTick = 0:2:23;
ax1.XTickLabel = {'Midnight','2','4','6','8','10','Noon','14','16','18','20','22'};
ax1.XTickLabelRotation = 45;

figure;
daynumber = weekday(dates);
histogram(daynumber)
title('Events per days of the week')
ax2 = gca;
ax2.XTick = [1:7];
ax2.XTickLabel = {'Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'};
ax2.XTickLabelRotation = 45;

【问题讨论】:

    标签: matlab datetime


    【解决方案1】:

    假设您已经有一个日期时间数组,您可以通过以下方式访问每个日期时间对象的日、小时、分钟、秒等:

    datetime.Day
    datetime.Hour
    datetime.Minute
    

    使用这种表示法,我们可以使用一个简单的数组来计算每天/小时/分钟/等发生的事件数量。然后使用条形图绘制结果。下面显示了两个示例,您可以从中推断以根据需要进行修改。

    以下是绘制一天内每小时的事件频率的方法:

    hours_count = zeros(24,1);
    for dt = 1:length(datetimes)
        hour = datetimes(dt).Hour;
        hours_count(hour+1) = hours_count(hour+1) + 1;
    end
    
    bar(hours_count)
    set(gca,'Xtick',1:24,'XTickLabel',strtrim(cellstr(num2str([0:23]'))))
    xlabel('Hour of the Day')
    ylabel('Number of Events')
    

    以下是绘制一个月内每一天的事件频率的方法:

    days_in_the_month = 30;
    days_count = zeros(days_in_the_month,1);
    for dt = 1:length(datetimes)
        day = datetimes(dt).Day;
        days_count(day) = days_count(day) + 1;
    end
    
    bar(days_count)
    set(gca,'Xtick',1:days_in_the_month,'XTickLabel',strtrim(cellstr(num2str([1:days_in_the_month]'))))
    xlabel('Day of the Month')
    ylabel('Number of Events')
    

    【讨论】:

    • 建议。您可以通过将小时数提取到逗号分隔的列表中、重新整形为数组并直接使用histcountshistc 来跳过统计事件的循环。在这种情况下,循环是低效的。
    • 类似hours = [datetimes.Hour]; hours_count = histc(hours, 1:24);
    • 是的,这就是我已经在使用直方图和 data.Hour 所做的事情。但是,我想做的是计算每天的平均事件数,并在我的事件所在的整个时间段内绘制出来。
    • 请提供您正在使用的所有代码。这将阻止我们建议您已经实施的事情。事实上,这是在这里提问时的预期行为
    • 我仍然不确定我是否理解。您有一组日期时间,因此将给定日期的事件数相加即可显示发生了多少。要找到一天中的“平均”事件数,您需要比较多个日期时间数组?
    猜你喜欢
    • 1970-01-01
    • 2016-01-02
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多