Verfasst am: 15.10.2017, 03:39
Titel: Lineplot färbt nicht korrekt ein
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.70.70.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)]);
Verfasst am: 15.10.2017, 18:48
Titel: Re: Lineplot färbt nicht korrekt ein
Hallo Tino97,
Der Debugger enthüllt das Problem zügig: Gib
dbstopiferror
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.
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.70.70.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
Einstellungen und Berechtigungen
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
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.