0

次のコードは、次の画像を生成します。

    probabilities = datasetlist(1,:);
    avgscores = datasetlist(2,:);
    x = probabilities;
    y = probabilities;
    err = avgscores;
    hold on
    for k = 1:length(x)
        e1 = errorbar(x(k),y(k),err(k),'-');
        if err(k) == min(err)
            set(e1,'Color','r')
            set(e1,'MarkerEdgeColor','r') 
            set(e1,'Marker','*')
        else
            set(e1,'Color','k')
            set(e1,'MarkerEdgeColor','k')
            set(e1,'Marker','.')
        end
    end
    hold on
    e1.LineStyle = '-';

ここに画像の説明を入力

ただし、データポイントを結ぶ線が必要です。も設定しましたe1.LineStyleが、うまくいきませんでした。どうすればそのラインを生成できますか?

4

1 に答える 1

1

ベクトルをプロットするのではなく、毎回単一の値をプロットするため、線はありません。これが、scatterプロットに近いものを取得する理由です。

これを修正するには、次の 2 つの方法があります。

  1. Solution 1既存のコードを最小限に変更する回避策です。
  2. Solution 2ベクトルを直接プロットすることにより、同じように見える結果を達成するはるかに短いコードです。(推奨)。

function q40765062
%% Prepare the data:
datasetlist = [0.4:0.05:0.7; abs(randn(1,7))];
probabilities = datasetlist(1,:);
avgscores = datasetlist(2,:);
x = probabilities;
y = probabilities;
err = avgscores;

%% Solution 1:
figure();
hold on
for k = 1:length(x)
    e1 = errorbar(x(k),y(k),err(k),'-');
    if err(k) == min(err)
        set(e1,'Color','r')
        set(e1,'MarkerEdgeColor','r') 
        set(e1,'Marker','*')
    else
        set(e1,'Color','k')
        set(e1,'MarkerEdgeColor','k')
        set(e1,'Marker','.')
    end
end
plot(x,y,'-k'); % < The main difference in this solution.

%% Solution 2:
figure(); 
[~,I] = min(err); % < We compute the index of the minimal value before plotting anything.
errorbar(x,y,err,'-*k'); hold on; % < Notice how we use the entire vectors at the same time.
errorbar(x(I),y(I),err(I),'-*r'); % < We only plot one value this time; in red.
于 2016-11-25T07:29:00.697 に答える