【问题标题】:How to plot this in matlab?如何在matlab中绘制这个?
【发布时间】:2016-05-18 13:54:28
【问题描述】:

我有以下代码

xr=randi([1 150],1,20)
    z=numel(xr);
    N=10;  %Window length
    gAll=zeros(1,z-N+1);
    for n=0:z-N;
        x=xr(1+n:N+n)
      d=max(x);
        m=numel(x);
        y=zeros(d,1);
        p=zeros(d,d);
        for k=1:m-1
        y(x(k))=y(x(k))+1; 
        p(x(k),x(k+1))=p(x(k),x(k+1))+1;
        end
        p=bsxfun(@rdivide,p,y);
        p(isnan(p)) = 0; 
        j=prod(p(p~=0));
        [~,~,idx] = unique(x);
        q=prod(hist(idx,1:max(idx))/numel(x));
        s=log(j);
        l=log(q);
        g=s+l
    gAll(n+1)=g;
    end
    plot(gAll)

我想要一个图,对于 gAll =-22 的阈值线,阈值线上方的图形应为红色,阈值线下方的图形应为蓝色,但图形应与这两种不同颜色连续连接,如何去做吧。

【问题讨论】:

  • 而不是循环中的y(x(k))=y(x(k))+1,而是调用tabulate (x)(在循环之前),然后取第二列。

标签: matlab plot matlab-figure figure


【解决方案1】:

您可以通过将值设置为NaN 来屏蔽图形区域。我将创建数据gAll 的高分辨率插值,然后创建两个副本,一个带有gAll>-22 掩码,一个带有gAll<-22 掩码,并将它们绘制在相同的轴上。

您可以使用interp1(x, gAll, x_HR)gAll_HR 设为x_HR 上的矢量gAll 的高分辨率版本,然后使用逻辑索引将值替换为NaN

gAll_low = gAll_HR;
gAll_low(gAll_HR>=-22) = NaN;
gAll_high = gAll_HR;
gAll_high(gAll_HR<-22) = NaN;

plot(x_HR, gAll_low, 'b-', x_HR, gAll_high, 'r-')

【讨论】:

  • 我不明白,你能不能把整个代码贴出来让我直接运行。
  • @RamShivshankar 只需写:x_HR = 1:0.01:max(x);(而不是0.01,你可以选择任何你想要的分辨率,试试看区别)然后gAll_HR = interp1(x,gAll,x_HR); 然后从上面复制代码,它会工作。如果你没有像示例中那样运行小向量,你可能会得到错误网格向量不是严格单调递增的。,虽然我不知道这意味着什么......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多