【问题标题】:How to change the line properties of a plot in switch environment within a for-loop in Matlab如何在 Matlab 的 for 循环中更改开关环境中绘图的线属性
【发布时间】:2013-01-11 21:05:00
【问题描述】:

我在一个 .dat 文件中包含来自模拟的数据。根据文件一列(此处为#13)中包含的某些标准('bu'),我想用不同的标记绘制数据,同时定义标记大小和标记面属性。 我所拥有的是针对不同情况的切换环境 - 定义我想要的标记和属性,所有这些都在一个 for 循环中,以遍历所有模拟数据。

我尝试了以下方法:

for i=1:s1(1)

bu = data1(i,13);

switch bu

    case 1
        set(h,'kd','MarkerSize',14,'MarkerFaceColor','k');
    case 2
        set(h,'kd','MarkerSize',14);
    case 3
        set(h,'k>','MarkerSize',14,'MarkerFaceColor','k');
    case 4
        set(h,'ks','MarkerSize',14,'MarkerFaceColor','k');
    case 5
        set(h,'ks','MarkerSize',14);
    case 6
        set(h,'ko','markersize',14);
    case 7
        set(findobj(gca,'k^','MarkerSize',14,'MarkerFaceColor','k'));    
end

figure(1);
h=plot(Re1(i),A1(i)); hold on
end

首先我尝试使用句柄“h”,但它说它是未定义的,我猜是因为 h=plot 稍后出现。然后我在最后一种情况下尝试了 findobj (这是第一次模拟的情况,所以这在第一轮中给出了错误),也没有工作(“不完整的属性值对” - 不知道这里的意思) .

我也尝试将所有这些属性放在一个字符串中,例如

str=['kd','MarkerSize',14,'MarkerFaceColor','k']

然后用

绘图
h=plot(Re1(i),A1(i),str); hold on

但它也不适用于带/不带括号。

现在我没有任何进一步的想法,感谢任何建议!

【问题讨论】:

    标签: matlab loops properties plot switch-statement


    【解决方案1】:

    我认为对您来说最简单的更改是将绘图选项放在 switch 块的单元格数组中。例如:

    options = {'kd', 'MarkerSize', 14, 'MarkerFaceColor', 'k'};
    

    稍后,当你绘制时:

    plot(x, y, options{:})
    

    我做的另一种方法是设置变量并在绘图命令中使用它们:

    style = 'kd';
    markerSize = 14;
    markerFaceColor = 'k';
    plot(x, y, style, 'MarkerSize', markerSize, 'MarkerFaceColor', markerFaceColor);
    

    【讨论】:

      【解决方案2】:

      有几种不同的方法可以做到这一点,其中之一 - 事先创建所有绘图对象,然后用数据和格式填充它们:

      figureHandle = figure;
      for i=1:s1(1)
      plotHandle(i) = plot(0,0); %just creating valid handle for future here
      end;
      
      • 上面的代码在你的for循环之前用bu开关,然后在你的开关中

      set(ph(i),'kd','MarkerSize',14,'MarkerFaceColor','k', 'Xdata', Re(1), 'Ydata', A1(i));

      使用 str 的方法也可以,除了你需要两个单元格数组 - 像这样的选项 nad 值:

      firstoption = 'kd';
      option = {'MarkerSize','MarkerFaceColor'};
      value = {14,'k'};
      
      h=plot(Re1(i),A1(i),firstoption); 
      for i=1:length(option)
      set(h,option{i},value{i});
      end;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-10
        • 2015-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-20
        • 1970-01-01
        相关资源
        最近更新 更多