0

我在一个 .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

但它也不适用于有/没有括号。

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

4

2 回答 2

1

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

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

设置(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;
于 2013-01-11T21:18:08.393 回答
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);
于 2013-01-11T21:19:10.493 回答