【问题标题】:Plotting one time-series in different colors matlab用不同颜色的matlab绘制一个时间序列
【发布时间】:2018-04-04 13:26:55
【问题描述】:

我想在 MATLAB 中重现以下情节:

例如,考虑以下时间序列:

a= [1,0.5,0.25, -0.5, -0.75,0.5,1.25, -0.8,0.1,0.2,0,3,0.8, -0.9, -1,1]

如何用一种颜色绘制大于 0 的值和低于另一种颜色的值?

【问题讨论】:

  • 在你的例子中,零以下的一些点仍然是浅粉色(你可以在开头看到它)。
  • 另见here

标签: matlab colors time-series matlab-figure


【解决方案1】:

诀窍是通过将点的值替换为 NaN 来避免绘制点。

我建议首先将a 分成两个数组,比如a_loa_hi

  • a_loa,但正值替换为 NaN
  • a_hia 但负值替换为 Nan

所以你会做这样的事情:

a_lo = a;
a_hi = a;

for i = 1:length(a)
    if a_lo(i) > 0
        a_lo(i) = NaN;
    end
    if a_hi(i) < 0
        a_hi(i) = NaN;
    end
end

然后你用不同颜色绘制a_loa_hi,别忘了hold on将两条曲线绘制在一起。

plot(a_lo,'r'); hold on;
plot(a_hi,'b');

这是我可以使用正弦波获得的示例:

【讨论】:

  • 只有在正数和负数之间有零时才能这样做。这不适用于问题中的示例。
  • @Adiel,这取决于您所说的“工作”。确实上面的零不会连接到下面的零,但我不知道这是否是OP的要求。我刚刚用简短的例子进行了测试,它可以工作,除了一些点是单独的(未连接)。在 OP 的初始曲线中,有些点低于零,但仍然是浅粉色...
  • 感谢您的回答。也许我们可以使用“查找”功能?因为我有一个包含 60000 个数据点的时间序列,而 matlab 在 5 分钟后仍然很忙
  • @M.H 我添加了一些优化,这可能会减少计算时间。你也可以尝试使用find,在两个单独的数组中获取负值、正值的索引,然后用 NaN 替换它们。
  • 我还是觉得你的代码在这里完全无效,但是如果你想改进它:a_lo=a; a_lo(a&gt;0)=NaN; a_hi=a; a_hi(a&lt;0)=NaN;
猜你喜欢
  • 2016-07-27
  • 1970-01-01
  • 2011-10-10
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
相关资源
最近更新 更多