2

MATLAB ユーザー向けの簡単な「便利な」質問。プロット コマンドをループして、毎回異なるデータをプロットに渡します。データはたまたま関数呼び出しから生成され、反復ごとに異なるパラメーター値が渡されます。すべてを同じ軸にプロットするには、「ホールド」機能を使用しています。残念ながら、これは利用可能な ColorOrder および/または LineStyleOrder プロット パラメータを自動的に循環しないため、プロットされたすべての線はすべての反復で同じスタイルになります。

for i=1:nLines
    [x_data y_data]=get_xy_data(param1(i),param2(i))
    plot(x_data,y_data)
end

プロットされるすべての線は、デフォルトの青い線のスタイルになります。明白な解決策は、次のように、さまざまなライン スタイルと色のセル配列を前もって生成することです。

line_styles={'-','--','-*'}; %...etc
colors=colormap(jet(nLines));

次に、反復ごとにそれぞれにアクセスします。私が欲しいのは、ColorOrder から生成される既定の色と、LineStyleOrder から生成される既定のライン サイクリングへのアクセスです。次のようなことを試してみると:

get(gca,'LineStyleOrder')

これは、その軸で使用されているスタイルのみを返します(スタイルの1つで定義された軸でのみこれをテストしましたが、ポイントは、可能なすべての線スタイルを提供するわけではありません)。助けてください、ありがとう!

編集:私が探しているものをより具体的にしましょう。

figure; hold on;
for i=1:nLines
    [xdata, ydata]=get_data(p1(i),p2(i))  % call some function to return x,y data
    plot(xdata,ydata) % on i=1, default blue line

    % function which tells matlab to get/set the next linestyle, color combination          
    nextStyle()       
end

これが存在しない場合、それを書くのはそれほど難しくありませんが、車輪を再発明する前に最初に尋ねると思いました.

4

3 に答える 3

1

線ごとに線のスタイルと色を直接設定できます。次に例を示します。

figure
hold on
nLines = 12;

line_styles={'-','--','-.'};
colors= hsv(nLines);
indexColors = 1;
indexLines = 1;

for i=1:nLines
    xData = 1:10;
    yData = rand(1,10);
    h = plot(xData,yData);

    ls = line_styles{indexLines};
    c = colors(indexColors,:);

    set(h,'color',c)
    set(h,'LineStyle',ls)

    if indexColors < length(colors)
        indexColors = indexColors + 1;
    else
        indexColors = 1;
    end

    if indexLines < length(line_styles)
        indexLines = indexLines + 1;
    else
        indexLines = 1;
    end
end
于 2013-07-23T19:51:16.173 に答える
1

DefaultAxesLineStyleOrderとのデフォルト プロパティの設定に興味があるかもしれませんDefaultAxesColorOrder

プロット (スタイルと色) は、最初に新しく定義された色をループしてから、線のスタイルを変更します。連続するプロット ループでは、使用hold allすると「グラフと現在の線の色と線のスタイルが保持されるため、後続のプロット コマンドで ColorOrder と LineStyleOrder がリセットされません」( matlab docを参照)。どちらの例でも同じ結果が得られます。

%default properties (line style and color)  
set(0,'DefaultAxesLineStyleOrder',{'--','-',':'})  
set(0,'DefaultAxesColorOrder', summer(4))  

figure('Color','w');  

%example plot 1 (concurrent plots)  
subplot(1,2,1);  
yvals = [1:50;1:50]  
plot(yvals, 'LineWidth', 2)  
axis([1 2 0 size(yvals,2)+1 ]);  
title('concurrent plot','FontSize',16);  

%example plot 2 (iterative plots)
subplot(1,2,2);  
for ii = 1:50  
    plot(yvals(:,ii), 'LineWidth', 2);  
    hold all;  
end  
axis([1 2 0 size(yvals,2)+1 ]);  
title('successive plot','FontSize',16);  

結果は

ここに画像の説明を入力

@Luis Mendoはそれほど間違っていなかったようです!

于 2013-07-23T22:02:01.960 に答える
1

使用できますhold all。これにより、プロットごとに異なる色と線種が自動的に設定されます。

于 2013-07-23T19:07:40.023 に答える