私は線のスタイル、マーカー、色の選択を自動化したいと思います。最もユニークなマーカー、線種、色を選択してください
i = 1:4
については
function [selected_lineStyles, selected_markers, selected_colours] = plot_lineStyle_markers_and_colours(i)
linestyles = {'-', '--', ':', '-.'};
colours = {'red', [0.0, 220.0, 0.0]./255.0, 'blue', 'black', [255.0, 180.0, 0.0]./255.0, [0.0, 128.0, 0.0]./255.0, [0.0, 255.0, 255.0]./255.0, [1.0, 0.0, 1.0]};
markers = {'d', '*', '+', 'x', 'o', 's', '^', 'v', '.', '>', '<', 'p', 'h'};
num_different_lineStyles = numel(linestyles);
num_different_markers = numel(markers);
num_different_colours = numel(colours);
num_different_combinations = num_different_markers*num_different_lineStyles*num_different_colours;
if any(i(:) > num_different_combinations)
warning('Not enough unique combinations of line styles, markers and colours available!');
end
i = 1 + mod(i - 1, num_different_combinations);
[lineStyle_i, marker_i, colour_i] = ind2sub([num_different_lineStyles, num_different_markers, num_different_colours], i);
selected_lineStyles = linestyles(lineStyle_i);
selected_markers = markers(marker_i);
selected_colours = colours(colour_i);
end
この機能異なる線種を返しますが、同じマーカーや色:私はこのような機能を持っていると思います。
私はこのようにしたいと思います:i = 1の場合、最初の線種、最初のマーカー、最初の色が返されます。 i = 2の場合、2番目の線種、2番目のマーカー、2番目の色が返されます。 i = 3、i = 4と同じです。i = 5の場合、linestyleは最初に繰り返されなければなりません。ただし、関数は5番目の色と5番目のマーカーを返す必要があります。
一般に、linestyle、マーカー、および色の「最もユニークな」組み合わせは、低いiに対して返される必要があります。プロット内では区別が容易です。
私は、この問題を数学的にどのようにフレーズするか、あるいは解決する方法は知らない。私はn次元、非正方形の配列の対角線に沿って歩く必要があると思います。
誰かがこれを手伝ったり、正しい方向に向けることができますか?
これは私が望むものではありません。 私はすべての可能な順列を得る方法を知っています。私が知りたいのは、これらの順列をどのように並べ替えるかです。最初に返される4色、線種、マーカーはすべて異なります! 例: i = 1:色:赤、linestyle: - 、マーカー:+ i = 2色:青、linestyle: - 。、マーカー:* i = 3:色:green、linestyle: - 、マーカー:o i = 4:色:黒、linestyle::、マーカー:x 理由は以下のとおりです。少数のデータセット(i = 1:4またはi = 1:すべての可能な416の順列を使用するよりも、 – Procyon
@Procyon、この答えを試してください。私は最初に誤解していましたが、問題について考えるのに少し時間がかかりました。 – craigim
あなたの答えをありがとう。私は、配列要素の主配列対角線までの距離と呼ばれるものがあり、この距離の昇順にインデックスを持たせたいと気づきました。詳細については私自身の質問に対する私の答えを見てください。 – Procyon