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

Probleme mit "fill"-Funktion. Es fehlt ein input

 

Ratio
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 30.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2017, 16:55     Titel: Probleme mit "fill"-Funktion. Es fehlt ein input
  Antworten mit Zitat      
Hallo liebe Matlab-Gemeinde,

ich bin noch Neuanfänger im Bereich Matlab und arbeite seit knapp 1-2Monaten damit für meine Masterarbeit. Jetzt möchte ich eine Kurve plotten, die mir den Verlauf eines Stoffes darstellt. Zu dieser Kurve soll eine durchgezogene Linie geplottet werden, die den mittleren Background darstellen soll. Diese Linie möchte ich durch die Varianz um Minimum und Maximum ergänzen und das ganze sollte dann noch "im Hintergrund" sein im Vergleich zur Hauptlinie.
Ich bin insgesamt schon relativ weit gekommen damit, nur klappt es nicht mit dem farbigen Ausfüllen der Linien. Ich habe hier im Forum viel zur fill-Funktion gelesen, doch leider funktioniert genau damit etwas nicht bei meinem code und ich konnte bisher weder hier im Forum, noch mit eigener Fehlersuche eine Lösung finden. Angehängt findet ihr meinen derzeitigen Code:
Code:


figure('Color','white')
plot(time, n_Logarithmus3)
hold on

hline1= plot(time,Mean_ncps_lab(:,3),'k');
ax=gca;
hline2=line(time,Min_ncps_lab(:,3),...
   'LineWidth',1,...
   'Color',[.8 .8 .8],...
   'Parent',ax);
 set(gca, 'children', flipud(get(gca,'children')))
hline3=line(time,Max_ncps_lab(:,3),...
   'LineWidth',1,...
   'Color',[.8 .8 .8],...
   'Parent',ax);
 set(gca, 'children', flipud(get(gca,'children')))
filler=fill(hline2,hline3,'k','edgecolor','k','Parent',hline1);
tlabel('x')
legend('Stoff1 background')
ylabel('normalized counts per seconds (ncps)')
 


...Was ich bisher habe seht ihr angehängt als Plot. Ziel ist es wie gesagt, die Fläche zwischen den beiden hellgrauen Linien auszufüllen und die blaue Linie dabei im Vodergrund zu halten.
Vielen Dank für eure Hilfe!

Matlab.jpg
 Beschreibung:

Download
 Dateiname:  Matlab.jpg
 Dateigröße:  25.34 KB
 Heruntergeladen:  317 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.08.2017, 22:11     Titel:
  Antworten mit Zitat      
Hallo,

hast du auch mal in die Doku zu dem Befehl geschaut?
Du musst numerische Daten übergeben, nicht Verweise auf die Linien.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratio
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 30.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2017, 10:16     Titel:
  Antworten mit Zitat      
Wenn ich meine numerischen Daten eingebe, also so:
Code:
figure('Color','white')
plot(time, n_Logarithmus3)
hold on

hline1= plot(time,Mean_ncps_lab(:,3),'k');
ax=gca;
hline2=line(time,Min_ncps_lab(:,3),...
   'LineWidth',1,...
   'Color',[.8 .8 .8],...
   'Parent',ax);
 set(gca, 'children', flipud(get(gca,'children')))
hline3=line(time,Max_ncps_lab(:,3),...
   'LineWidth',1,...
   'Color',[.8 .8 .8],...
   'Parent',ax);
 set(gca, 'children', flipud(get(gca,'children')))
filler=fill(Max_ncps_lab(:,3),Min_ncps_lab(:,3),'k','edgecolor','k');
tlabel('x')
legend('Stoff1 background')
ylabel('normalized counts per seconds (ncps)')

erhalte ich als Plot nur einen vertikalen Strich..Max_ncps_lab und Min_ncps_lab sind die jeweiligen Minima, die ich bestimmt habe. Ich habe sie in einer Matrix zusammengefasst, die der Länge meiner Zeit entspricht:
Code:
Mean_ncps_lab=ones(2284,9);
Mean_ncps_lab(:,:)=repmat(Mittel,[2284,1]);
Max_ncps_lab = ones( 2284,9 );
Max_ncps_lab(:,:) = repmat(Max_ncps_labor,[2284,1]);
Min_ncps_lab= ones(2284,9);
Min_ncps_lab(:,:)= repmat(Min_ncps_labor,[2284,1]);
Mean_ncps=ones(16671,9);
Mean_ncps(:,:)=repmat(Mittel,[16671,1]);
Min_ncps=ones(16671,9);
Min_ncps(:,:)= repmat(Min_ncps_labor,[16671,1]);
Max_ncps(:,:)=ones(16671,9);
Max_ncps(:,:)=repmat(Max_ncps_labor,[16671,1]);

Muss ich das evtl anders definieren, um den fill-Befehl richtig umsetzen zu können? Anbei findest du den Plot, der entsteht, wenn ich mit obigem Code arbeite...

Matlab.jpg
 Beschreibung:

Download
 Dateiname:  Matlab.jpg
 Dateigröße:  21.59 KB
 Heruntergeladen:  272 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.08.2017, 10:31     Titel:
  Antworten mit Zitat      
Hallo,

du machst da aus y-Werten x-Werte.
Du musst Max_ncps_lab(:,3) und Min_ncps_lab(:,3) zu einem Vektor zusammenfassen und entsprechend x-Werte zusammenstellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratio
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 30.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2017, 12:11     Titel:
  Antworten mit Zitat      
Das habe ich jetzt mal über reshape probiert.. das Ergebnis ist leider immer noch das Gleiche, wie in obiger Grafik. Mein Ansatz sah wie folgt aus:
Code:
v3_max = reshape (Max_ncps_lab(:,3), [1, 2284]);
v3_min= reshape(Min_ncps_lab(:,3),[1,2284]);
v3_maxmin= [v3_max; v3_min];
v3_mean= reshape(Mean_ncps_lab(:,3),[1,2284]);
v3_time= reshape(time,[1,2284]);
figure('Color','white')
plot(time, n_Logarithmus3)
hold on

hline1= plot(v3_time,v3_mean,'k');
ax=gca;
hline2=line(v3_time,v3_maxmin(2,:),...
   'LineWidth',1,...
   'Color',[.8 .8 .8],...
   'Parent',ax);
 set(gca, 'children', flipud(get(gca,'children')))
hline3=line(v3_time,v3_maxmin(1,:),...
   'LineWidth',1,...
   'Color',[.8 .8 .8],...
   'Parent',ax);
 set(gca, 'children', flipud(get(gca,'children')))
filler=fill(v3_maxmin(2,:), v3_maxmin(1,:),'k','edgecolor','k');
tlabel('x')
legend('Stoff1 background')
ylabel('normalized counts per seconds (ncps)')
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratio
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 30.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2017, 12:20     Titel:
  Antworten mit Zitat      
Hallo,

das Problem muss auch definitiv beim fill(...) liegen. Ich habe nochmal den Code darüber evaluiert. Er erzeugt genau den Plot, den ich haben will, nur ohne die ausgefüllte Fläche..

VG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.08.2017, 13:14     Titel:
  Antworten mit Zitat      
Hallo,

ich habe mir das nochmal angesehen: geht es "nur" darum, ein Rechteck zwischen die beiden grauen Linien zu legen?
Ein reproduzierbares Beispiel wäre in jedem Fall hilfreich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratio
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 30.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2017, 13:33     Titel:
  Antworten mit Zitat      
Hallo,
Genau, es soll nur ein transparentes Rechteck zwischen die beiden hellgrauen Linien gelegt werden (also die Fläche zwischen den Linien transparent farblich ausgefüllt werden).

Vielen Dank, dass Sie sich da so eine Mühe machen!

VG!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.08.2017, 13:43     Titel:
  Antworten mit Zitat      
Hallo,

Beispiel:
Code:
t1 = datetime('yesterday');
t2 = datetime('today');
mini = 1;
maxi = 2;
fill([t1, t2, t2, t1], [mini, mini, maxi, maxi], 'k','edgecolor','k')


Wie das auf die Anwendung angepasst werden muss, kann ich mangels Wissen über Dimensionen der Variablen schlecht sagen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ratio
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 30.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2017, 14:41     Titel:
  Antworten mit Zitat      
Hallo,

das hat mich zum Erfolg gebracht, vielen Dank!
Ich habe die Fläche anschließend noch transparent gemacht mit Hilfe von set('Face Alpha').
Damit auch die Nachwelt noch etwas davon hat, hinterlasse ich hier mal das funktionierende Ergebnis als Beispiel (mit JPG angehängt):
Code:

v3_max = reshape (Max_ncps_lab(:,3), [1, 2284]);
v3_min= reshape(Min_ncps_lab(:,3),[1,2284]);
v3_maxmin= [v3_max; v3_min];
v3_mean= reshape(Mean_ncps_lab(:,3),[1,2284]);
v3_time= reshape(time,[1,2284]);
figure('Color','white')
plot(time, n_Logarithmus3)
hold on

hline1= plot(time,v3_mean,'k');
ax=gca;
hline2=line(time,v3_maxmin(2,:),...
   'LineWidth',1,...
   'Color',[.8 .8 .8],...
   'Parent',ax);
 set(gca, 'children', flipud(get(gca,'children')))
hline3=line(time,v3_maxmin(1,:),...
   'LineWidth',1,...
   'Color',[.8 .8 .8],...
   'Parent',ax);
 set(gca, 'children', flipud(get(gca,'children')))
filler=fill([time(1,:),time(2284,:), time(2284,:), time(1,:)],[v3_min(:,1), v3_min(:,1), v3_max(:,1), v3_max(:,1)],'k','edgecolor','k');
set(filler,'FaceAlpha',0.2)
tlabel('x')
legend('Stoff1 background')
ylabel('normalized counts per seconds (ncps)')


Matlab.jpg
 Beschreibung:

Download
 Dateiname:  Matlab.jpg
 Dateigröße:  25.6 KB
 Heruntergeladen:  267 mal
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.