Ich versuche, einen Plot (unter Verwendung von Streuung oder Plot) auf einem Datensatz zu zeichnen. Ich habe ein data Array, das die Werte enthält. Ich habe auch ein confidence Array, das Werte von 0 bis 1 enthält, um anzuzeigen, wie zuverlässig dieser Wert ist. In meinem Streudiagramm muss ich die Werte, deren Vertrauen unter 0,5 liegt, in einer anderen Farbe darstellen.

Bisher habe ich:

for i=1:length(data)
    if confidence(i) < 0.5
        colour(i) = 'g';
    else
        colour(i) = 'b';
    end
end

f = figure;
scatter(xvalues,data,[],colour,'x');

Das Problem:

Ich erwarte, dass es grüne und blaue x gibt, aber die Handlung zeigt alles blau. Ich habe überprüft, dass es Konfidenzwerte gibt, die definitiv unter 0,5 liegen. Ich bin mir nicht sicher, wie ich die Farben sonst angeben soll.

Ich benutze Matlab R2013a.

Danke für Ihre Hilfe.

0
Sadia1990 5 Jän. 2016 im 06:06

2 Antworten

Beste Antwort

Sie sollten einfach zweimal mit dem Befehl hold on zeichnen:

data = rand(10,1);
confidence = rand(10,1);
xvalues = rand(10,1);

f = figure; hold on;
scatter(xvalues(confidence<0.5),data(confidence<0.5),'g');
scatter(xvalues(confidence>=0.5),data(confidence>=0.5),'b');

Beachten Sie, dass Sie die gewünschten Werte selektiv auswählen können, indem Sie direkt xvalues(confidence<0.5) ohne for-Schleife auswählen (geben Sie confidence<0.5 in das Befehlsfenster ein, um zu sehen, was es tut).

Auch für die Zukunft ist es sehr nützlich, wenn Ihr Code ein in sich geschlossenes MWE ist (minimales Arbeitsbeispiel). Dies bedeutet auch, dass einige Datenpunkte generiert werden, sodass andere Personen Ihren Code einfach kopieren / einfügen und direkt ausführen können :).

2
Steve Heim 5 Jän. 2016 im 08:00

Wenn Farbe als Zeichenfolge angegeben wird, kann sie für die Punkte nicht variiert werden. Ihr Code sollte einen Fehler auslösen, aber zum Glück nicht.

Um es so zu machen, wie Sie es haben, denke ich, dass die Antwort von lifesayko die bessere ist. Was wäre, wenn Sie 10 verschiedene Farben auf dem Plot anzeigen möchten? In diesem Fall möchten Sie die Farbe als RGB-Triplets angeben, was bedeutet, dass color eine dreispaltige Matrix ist.

color = zeros(size(data));
color(confidence < 0.5,:) = [0 1 0];
color(confidence >= 0.5,:) = [0 0 1];
scatter(xvalues,data,color);
0
Some Guy 5 Jän. 2016 im 05:25