WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

2000000 messwerte nach häufigkeit in einer Grafik einfärbe

 

petra24
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2012, 23:50     Titel: 2000000 messwerte nach häufigkeit in einer Grafik einfärbe
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Tabelle mit ca. 2000 0000 Spannungswerten und dem dazugehörigen Leistungswerten. Nun möchte ich diese Werte als Punkte in einer Grafik ausgeben lassen (x-Achse: Spannung, y-Achse: Leistung).
Damit ich aber auch die Häufigkeit der Messpunkte mit einbringe, möchte ich diese je nach Anzahl farbig machen (Bsp. tritt ein Wert 500 mal auf dann schwarz, tritt ein wert 10 mal auf dann grau).

Wie könnte ich das umsetzen?
Hab die Daten bereits nach den Spannungswerten sortiert, aber leider hab ich keine ahnung wie ich weiter verfahren könnte...
hoffe ihr könnt mir weiter helfen

vielen dank
petra
Private Nachricht senden Benutzer-Profile anzeigen


rainer87
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 22.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2012, 02:12     Titel:
  Antworten mit Zitat      
es geht bestimmt viel schlauer, aber habs grad mal so auf die schnelle probiert.
d.h. ich frag mich auch ob das das ist was du haben möchtest.
Code:

U_komplett=randi(150,100,1);
P_komplett=U_komplett.^2;
U=unique(U_komplett);
P=unique(P_komplett);
bins=length(U);
[n x]=hist(U_komplett,bins);
figure;
for idx=1:bins
    switch 1
        case n(idx)>1 && n(idx)<=2 %die grenzen halt entsprechend anpassen
            linestyle='-<r';
        case n(idx)>2 && n(idx)<=4
            linestyle='-<k';
        case n(idx)>4 && n(idx)<=7
            linestyle='-<b';
        case n(idx)>7 && n(idx)<=10
            linestyle='-<g';
        case n(idx)>10
            linestyle='-<c';
        otherwise
            continue
    end
    plot(U(idx),P(idx),linestyle)
    hold on
end
Private Nachricht senden Benutzer-Profile anzeigen
 
petra24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2012, 14:23     Titel:
  Antworten mit Zitat      
ja dass wollte ich machen.
Nur möchte ich gerne in verschiedenen Grauabstufungen arbeiten. Wie kann man die Farben dann mit dieser Grauabstufung definieren?

Außerdem hab ich noch dass Problem das mir nicht mehr die kompletten Punkte eingezeichnet werden, nach unique hab ich noch ca. 4000 000 Werte, dh diese Werte kommen einfach vor....
Eingezeichnet werden aber nur 2000 Werte.

An was kann das noch liegen?

Danke schonmal für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
rainer87
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 22.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2012, 22:47     Titel:
  Antworten mit Zitat      
Code:

%R, B, G muessen dabei zwischen 0 und 1 sein.
c=[R G B]
plot(x,y,'Color',c)


siehe Lineseries Properties und ColorSpec

zu der anzahl der werte:
hast du vielleicht deine grenzen inkorrekt gesetzt? dass du irgendwo nur > wo >= hinmuesste hin. oder irgendeinen fall nicht abgedeckt?
wird der plot befehl den deine 4e6mal ausgeführt? einfach mal einen zähler vor den plot befehl setzen und mitzählen lassen...
Private Nachricht senden Benutzer-Profile anzeigen
 
petra24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2012, 23:55     Titel:
  Antworten mit Zitat      
ich habs jetzt anders versucht.
und zwar zähl ich zuerst die gleichen werte paare mit folgendem code:
Code:

[a, b, c]=unique(jan,'rows');
[u, v]=histc(c,1:max(c));
Z=[jan, u(v)];
Zneu=unique(Z,'rows');


anschließend lass ich die werte dann erst zeichnen:
Code:
anzahl=Zneu(:,3);
bins=length(Zneu);
for idx=1:bins
   switch 1
        case anzahl(idx)>1 && anzahl(idx)<=10
           linestyle='.g';
        case anzahl(idx)<10 && anzahl(idx)<=50
            linestyle='.b';
      case anzahl (idx)>50
          linestyle='r.';
      otherwise
           continue
           
    end
   
   U=Zneu(:,1);
  P=Zneu(:,2);
  plot(U(idx),P(idx),linestyle)
  hold on
end


das funktioniert soweit ganz gut. das problem ist nur dass es auf grund der datenmenge sehr lange dauert bis die grafik gezeichnet ist. Außerdem kann ich die Grafik auch nicht speichern (bekomme da immer eine Fehlermeldung). Hast du vllt eine tipp wie ich die datei anders zeichnen lassen kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
rainer87
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 22.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2012, 06:55     Titel:
  Antworten mit Zitat      
spontane antwort nach alkohol Wink
ich koennte mir vorstellen, dass es einfacher waere einfache in neuen vektoren die entsprechenden werte zu speichern, die die gleiche farbe haben und anschließen die neuen vektoren als ganzes zu plotten...
also ala:
if gleiche anzahl
packe werte in cell element 1
end usw...
Code:
switch 1
case case1
        zielvektor{1}(end+1)=deine zahl. %usw fuer die anderen cases..
case case2
case case3
end

figure;
for idx=1:length(zielvektor)
      plot(zielvektor{idx}) % eventuell hier hlat die parameter einfuegen.
end



wobei es vielleicht schlauer ist den "zielvektor" vorher zu initialisieren
mal gucken ob ich morgen noch was editiere Wink

edit: wie lautet denn die fehlermeldung?
Private Nachricht senden Benutzer-Profile anzeigen
 
petra24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2012, 13:37     Titel:
  Antworten mit Zitat      
in diesem zusand komme ja meist die besten ideen Very Happy

also ich hab jetzt versucht den code auf meine variablen zu übertragen. aber irgendwie haut es nicht so wirklich hin. Hier schonmal der verwendete code:
Code:
anzahl=Zneu(:,3);
bins=length(Zneu);
Zneusort=[length(Zneu),3];
for idx=1:bins
   switch 1
      case anzahl(idx)>1 && anzahl(idx)<=10
           Zneusort{1}(1+end)=[Zneu(idx,1),Zneu(idx,2),Zneu(idx,3)];
      case anzahl(idx)<10 && anzahl(idx)<=50
            Zneusort{2}(1+end)=[Zneu(idx,1),Zneu(idx,2),Zneu(idx,3)];
      case anzahl (idx)>50
         Zneusort{3}(1+end)=[Zneu(idx,1),Zneu(idx,2),Zneu(idx,3)];
       otherwise
           continue
    end
end
 

und als fehlermeldung bekomm ich:
Code:

Cell contents reference from a non-cell array object.

Error in sortieren (line 10)
            Zneusort{2}(1+end)=[Zneu(idx,1),Zneu(idx,2),Zneu(idx,3)];
 


Wenn ich die frühere Variante verwende dauert es bis zu einer stunde bis die grafik erstellt ist und beim speichern kommt es meist zu gar keiner fehlermeldung sondern matlab hängt sich auf.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.