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

Lineplot färbt nicht korrekt ein

 

Tino97
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 21.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2017, 03:39     Titel: Lineplot färbt nicht korrekt ein
  Antworten mit Zitat      
Hallo zusammen,

ich habe Datenpunkte um eine Spirale zu Plotten, wobei jedes Wegstückchen mit einem Wert (C) versehen ist. Mit einer auf C bezogenen Colormap und einen Lineplot können diese Werte auch farblich veranschaulicht werden. Das Funktioniert auch ohne Probleme.

Jetzt möchte ich aber nur einen bestimmten Wertebereich farblich hervorheben, während alles unter/über diesem Bereich grau gefärbt wird. Daran scheitert es leider und ich konnte den Fehler noch immer nicht finden.

Meine bisher besten Versuche sind im angebenen code zu sehen. Das Erstellen der Colormap sollte in Ordnung sein, daher vermute ich, dass der Fehler bei den Plotfunktionen liegt. Ich habe über zwei verschiedene Wege versucht an die Lösung heranzukommen.

Plot Ver.1 produziert keine Fehlermeldung aber färbt nur wenige Abschnitte ein und bedient sich nicht der kompletten Farbpalette.

Plot Ver.2 scheint vielversprechender zu sein aber ich erhalte den Fehler: Index exceeds matrix dimensions.

Code:

data = fopen('Test.txt');                                      
HKoord = textscan(data, '%f %f %f %f');
HSpalten = cell2mat(HKoord);            
xx = HSpalten(:,1);                 % x
yy = HSpalten(:,2)';                % y
zz = HSpalten(:,3)';                % z
C = HSpalten(:,4)';                 % Daten            
fclose(data);    

cmax=40;                            % Datenbereich auswählen  
cmin=20;
C_sel=C;                            % C_sel wird Vektor mit Werten zwischen ..
C_sel(C_sel>cmax)=[];               % .. cmax und ..
C_sel(C_sel<cmin)=[];               % .. cmin.

% Colormap für Werte ais C_sel aufbauen
cmap='jet';                               % cmap die Farbskala "jet" zuordnen
cmap=colormap(cmap);                      % Für colormap den Typ "jet" wählen
yyc=linspace(min(C_sel),max(C_sel),size(cmap,1));     % Farbpalette generieren
cm = spline(yyc,cmap',C_sel);             % Finden der Farbwerte
cm(cm>1)=1;                               % Wert darf nicht >1 sein
cm(cm<0)=0;                               % Wert darf nicht <0 sein

%%%%%%%%%%%%%%%%%%%%%%%%% Plot Ver.1
% k=1;
% for i=1:length(zz)-1
%     if C(i+1)==C_sel(k)
%         colchange=cm(:,k);                    % Colormap anwenden
%         for k=1:length(C_sel)
%         end
%     else
%         colchange=[0.7 0.7 0.7];             % Colormap anwenden
%     end
%     h(i)=line([zz(i) zz(i+1)],[xx(i) xx(i+1)],[yy(i) yy(i+1)],'color',colchange,'LineWidth',3);
% end

%%%%%%%%%%%%%%%%%%%%%%%%% Plot Ver.2
k=2;
for i=1:length(zz)-1
    if C(i+1)==C_sel(k-1)
                colchange=cm(:,k);  % Colormap anwenden
        k=k+1
        else
        colchange=[0.7 0.7 0.7];   % Grau färben wenn außerhalb des Wertebereichs
    end
    h(i)=line([zz(i) zz(i+1)],[xx(i) xx(i+1)],[yy(i) yy(i+1)],'color',colchange,'LineWidth',3);
end

% Colorbar für ausgewählten Wertebereich
view(3)
caxis([min(C_sel),max(C_sel)]);    % Max/Min der Colorbar
colorbar('Ticks',[min(C_sel),(min(C_sel)+max(C_sel))/2,max(C_sel)]);


Hat vielleicht jemand einen Tipp für mich?
Gruß
Tino

Test.m
 Beschreibung:

Download
 Dateiname:  Test.m
 Dateigröße:  1.93 KB
 Heruntergeladen:  297 mal
Test.txt
 Beschreibung:

Download
 Dateiname:  Test.txt
 Dateigröße:  41.56 KB
 Heruntergeladen:  338 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.10.2017, 18:48     Titel: Re: Lineplot färbt nicht korrekt ein
  Antworten mit Zitat      
Hallo Tino97,

Der Debugger enthüllt das Problem zügig: Gib dbstop if error im Command Window ein. Dann stoppt Matlab in der entsprechenden Zeile und Du siehst, dass cm(:,k) für k=53 aufgerufen wird, aber cm hat nur 52 Spalten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Tino97
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 21.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2017, 11:39     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für die Rückmeldung. Den letzten Beitrag mit neuen Ansätzen habe ich wieder entfernt, da ich jetzt nach ca. 4 Litern Kaffee einen gefunden habe, der auch funktioniert. Es war mal wieder ein Fehler an einer Stelle, die ich für absolut richtig hielt.

Code:
k=1;
for i=1:length(zz)-1
    if C(i)==C_sel(k)
        colchange=cm(:,k);  % Colormap anwenden
        k=k+1
        if k==length(cm) % Beim Erreichen des Endes ColormapMatrix k-1, um
            k=k-1;       % Matrxdimension einzuhalten
        end
    else
        colchange=[0.7 0.7 0.7];   % Grau färben wenn außerhalb des Wertebereichs
    end
    h(i)=line([zz(i) zz(i+1)],[xx(i) xx(i+1)],[yy(i) yy(i+1)],'color',colchange,'LineWidth',4);
end


Damit hat es nun geklappt, auch wenn mir die if Bedingung, die von k am Ende 1 abzieht, sehr unschön vormuliert vorkommt

Gruß
Tino
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 - 2024 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.