You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab绘制多组不同起止时间戳的时间序列图技术求助

解决同图绘制20组不同起止时间戳时间序列的问题

我帮你调整并优化代码,搞定在单张图里绘制20组带不同起止时间戳的时间序列的需求,先梳理原代码里的几个小问题,再给出可直接运行的优化版本:

原代码存在的问题

  • linspecer(12,'qualitative')只能生成12种定性颜色,没法满足20组序列的区分需求,而且代码里的N没定义,mod(j,N)会直接报错
  • 循环逻辑可能不符合你的实际需求:原代码外层遍历6个起止区间,内层遍历20个序列,会把所有序列在每个区间都画一遍,而不是每个序列对应专属的起止区间
  • startidx里的0索引在MATLAB中会报错,MATLAB数组索引是从1开始的

优化后的代码

假设你需要20组序列各自对应一组专属的起止时间戳,以下是修正后的代码:

% 定义20组起止时间戳(示例值,可根据你的实际数据修改)
startidx = randi([1, 200], 1, 20); % 随机生成20个起始索引(范围1到200)
endidx = startidx + randi([10, 40], 1, 20); % 对应生成结束索引,确保end > start
endidx(endidx > 250) = 250; % 防止索引超出Y的列数250

% 生成20种不同的颜色(用MATLAB自带的tab20色图,刚好20种区分度不错的颜色)
colors = colormap(tab20);

% Y为20×250矩阵,每行对应一个时间序列(假设你已经提前定义好Y)
% Y = rand(20,250); % 如果你需要测试,可以用这行生成随机测试矩阵

figure;
hold on;
grid on; % 可选,添加网格会让图更易读

for k = 1:size(Y, 1)
    % 绘制第k个序列,从它对应的startidx(k)到endidx(k)
    plot(Y(k, startidx(k):endidx(k)), 'Color', colors(k, :), 'LineWidth', 1.2);
end

% 设置x轴范围覆盖整个时间序列的长度
xlim([1, size(Y, 2)]);
xlabel('时间戳');
ylabel('序列值');
title('20组不同起止时间戳的时间序列');
hold off;

如果你实际需求是在6个不同的时间区间里分别绘制20组序列,可以用这个调整版本:

% 修正原有的6组起止区间(把0改成1,符合MATLAB索引规则)
startidx = [1 9 20 64 115 160];
endidx = [9 20 64 115 160 250];

% 生成足够的颜色:用tab20c色图,20种颜色重复使用也能区分不同序列
colors = colormap(tab20c);

Y = rand(20,250); % 测试用的随机矩阵,可替换成你的实际数据

figure;
hold on;
grid on;

for j = 1:size(startidx, 2)
    for k = 1:size(Y, 1)
        % 给每个序列分配唯一颜色,超出20种就循环使用
        coloridx = mod(k-1, size(colors,1)) + 1;
        plot(Y(k, startidx(j):endidx(j)), 'Color', colors(coloridx, :), 'LineWidth', 1);
    end
end

xlim([1, size(Y, 2)]);
xlabel('时间戳');
ylabel('序列值');
title('多区间下的20组时间序列');
hold off;

关键说明

  • 用MATLAB自带的tab20/tab20c色图,不用依赖第三方工具linspecer就能拿到足够的区分色
  • 所有索引都从1开始,严格遵循MATLAB的数组索引规则
  • 你还可以通过添加图例(legend)、调整线条样式等方式,进一步提升图的可读性

内容的提问来源于stack exchange,提问作者Anika Tabassum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:32:18