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

Zeitreihe

 

regen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2013, 19:45     Titel: Zeitreihe
  Antworten mit Zitat      
Hallo,

ich habe Zeitreihen von Niederschlägen mit einer Auflösung von 30 Minuten.
Diese sollten in Minuten-Werte umgerechnet werden.

diese möchte ich plotten, nur möchte ich es farblich darstellen, beispielsweise werte oberhalb x sollen rot, werte gleich null sollen grün, plötzlich stark veränderte werte (mir faktor 10) in blau und rest soll schwarz sein. Habe auch ähnliche beiträge gesehen, nur leider nichts passendes zu meinem problem


Harald
Forum-Meister

Forum-Meister


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

das Umwandeln in Minuten geht beispielsweise über Interpolation. Die Aussagekraft davon kann jedoch begrenzt sein. Wenn es um 12 Uhr stark regnet und um 12:30 nicht, dann ist ja nicht gesagt, dass es um 12:15 zwangsläufig mittelstark regnet.
Wenn du nicht interpolieren möchtest, musst du angeben, wie diese Umrechnung erfolgen soll.

Generell kannst du mit logischer Indizierung die relevanten Daten herausfiltern und diese dann plotten.

Ein Wert kann ja oberhalb von x liegen und einen starken Anstieg beinhalten. Wie soll er dann eingefärbt werden?

Was verstehst du unter "mit Faktor 10 verändert"?

Es wäre nicht schlecht, wenn du das, was du bisher versucht hast, zeigst, und die konkreten Probleme, die dabei auftraten.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2013, 14:20     Titel:
  Antworten mit Zitat      
Sobald sich der Wert um seine vier fache verändert, wie in beispiel 4 auf 16, soll es gefärbt werden
Code:

01.01.2013 00:00   02.01.2013 00:00   3
01.01.2013 00:00   02.01.2013 04:00   4
01.01.2013 00:00   02.01.2013 08:00   16
01.01.2013 00:00   02.01.2013 12:00   17
01.01.2013 00:00   02.01.2013 16:00   16
01.01.2013 00:00   02.01.2013 20:00   16
 

Da würde ich gerne 4 und 16 orange anfärben und den andauernden hohen wert vielleicht gelb behalten. Werte oberhalb 20 sollen dann in rot angezeigt werden. Werte gleich null sollen grün angezeigt werden. So schön bunt wie ostereier.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.04.2013, 19:40     Titel:
  Antworten mit Zitat      
Hallo,

bitte gehe auf die Fragen ein. Dass du dir nun andere Farben aussuchst als in der ursprünglichen Erklärung macht es nicht verständlicher.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2013, 22:54     Titel:
  Antworten mit Zitat      
Zitat:
Hallo,
Halli Hallo

Zitat:
das Umwandeln in Minuten geht beispielsweise über Interpolation. Die Aussagekraft davon kann jedoch begrenzt sein. Wenn es um 12 Uhr stark regnet und um 12:30 nicht, dann ist ja nicht gesagt, dass es um 12:15 zwangsläufig mittelstark regnet.
Wenn du nicht interpolieren möchtest, musst du angeben, wie diese Umrechnung erfolgen soll.


Das mit transferieren auf andere zeit lassen wir mal, wir lösen das schritt für schritt

Code:
Generell kannst du mit logischer Indizierung die relevanten Daten herausfiltern und diese dann plotten.


Das geht mit find etc

Zitat:
diese möchte ich plotten, nur möchte ich es farblich darstellen, beispielsweise werte oberhalb x sollen rot, werte gleich null sollen grün, plötzlich stark veränderte werte (mir faktor 10) in blau und rest soll schwarz sein. Habe auch ähnliche beiträge gesehen, nur leider nichts passendes zu meinem problem


Zitat:
werte oberhalb x sollen rot

x1 = find(datenmenge > x); %ROT
Zitat:
werte gleich null sollen grün

x2 = find(datenmenge == 0); %GRÜN
Zitat:
plötzlich stark veränderte werte (mir faktor 10) in blau

x3 = find(diff(data) > data*10)); %BLAU STIMMT DAS


Code:
Ein Wert kann ja oberhalb von x liegen und einen starken Anstieg beinhalten. Wie soll er dann eingefärbt werden?

anstieg bzw. abstieg (Steigung) sollte mit blau gegenzeichnet werden.. ansonsten weiterhin in rot

Code:
Was verstehst du unter "mit Faktor 10 verändert"?

Faktor zehn könnte beispielsweise bedeutet, wenn der nachfolger, das zehn fache größer ist, als der jetzige wert ist.

Code:
Es wäre nicht schlecht, wenn du das, was du bisher versucht hast, zeigst, und die konkreten Probleme, die dabei auftraten.


das mit einfärben war mir noch schwer, aber habe folgendes versucht, nur leider kommt korrektes raus,

plot(x1,datenmenge (x1),'r')
hold on;
plot(x2,datenmenge (x1),'g')
plot(x3,datenmenge (x1),'b')

Zitat:
Grüße,
Harald


Viele Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.04.2013, 08:47     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Das geht mit find etc

Jep, und häufig etwas effizienter als find ist dann noch die logische Indizierung (logical indexing).

Zitat:
x3 = find(diff(data) > data*10)); %BLAU STIMMT DAS

Der Differenzvektor hat ein Element weniger als die Originaldaten. Ich würde also das machen:
Code:
x3 = find(diff(data) > data(1:end-1)*10));


Zitat:
Faktor zehn könnte beispielsweise bedeutet, wenn der nachfolger, das zehn fache größer ist, als der jetzige wert ist.

Und mir fallen konkret noch zwei weitere Beispiele ein, was das bedeuten könnte. Da musst du aber wissen, was du willst. Bei deinem bisherigen Ansatz ist der Nachteil, dass jeder Anstieg von 0 auf einen anderen Wert als "starker Anstieg" betrachtet werden wird.

Zitat:
das mit einfärben war mir noch schwer, aber habe folgendes versucht, nur leider kommt korrektes raus,

plot(x1,datenmenge (x1),'r')
hold on;
plot(x2,datenmenge (x1),'g')
plot(x3,datenmenge (x1),'b')

Hast du in deinem tatsächlichen Code x1 in den beiden unteren Zeilen durch x2 bzw. x3 ersetzt? Sonst passts natürlich nicht.
Inwiefern weicht das, was du da bekommst, vom erhofften Ergebnis ab?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2013, 19:34     Titel:
  Antworten mit Zitat      
Code:
x3 = find(diff(data) > data(1:end-1)*10));
 


das mit 0 ist mir erst jetzt aufgefallen, wie köse ich das problem in dem fall..

vielleicht mit
Code:
x3 = find(diff(data) >= (data(1:end-1)+1)*10));
 


du hast recht...


hier jetzt nun beipiel und die produzierte grafik im anhang
Code:
x1 = find(dataMenge >= 30);
x2 = find(dataMenge == 0);
x3 = find(diff(dataMenge) > dataMenge(1:end-1)*10);
 
plot(x1,dataMenge(x1),'r')
hold on;
plot(x2,dataMenge(x2),'g')
plot(x3,dataMenge(x3),'b')


ich habe jetzt ein bproblem zunächst einmal ist die y achse nicht korrekt beschriftet und zweitens sollte es wie ein normale plot funktion aussehen nur halt bissl bunt

beispiel1.png
 Beschreibung:

Download
 Dateiname:  beispiel1.png
 Dateigröße:  5.78 KB
 Heruntergeladen:  388 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.04.2013, 21:25     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
vielleicht mit ...

Oder auch mit irgendetwas anderem, aber das musst du entscheiden.

Zitat:
zunächst einmal ist die y achse nicht korrekt beschriftet

Wie soll sie denn beschriftet sein?

Zitat:
zweitens sollte es wie ein normale plot funktion aussehen nur halt bissl bunt

Was ist eine "normale plot funktion"?
Mich erstaunt hier, dass sehr viel blau ist, oder hast du die Linie vorher einfach geplottet? Zudem würde ich
Code:
plot(x1,dataMenge(x1),'ro')

oder ähnliches verwenden, da sonst auch weit voneinander weg liegende Datenpunkte miteinander verbunden werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
freddy123
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 27.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2013, 21:41     Titel:
  Antworten mit Zitat      
Im Anhang sollten zwei Bilder sein, sorry mein fehler, die eine von eben ist die ganz einfache plot-Funktion auf die Datenmenge , und in der zweiten (die im anhang) Grafik findest du meine zusammengeschnittene Funktionsplot. irgendwie ist was faul

fehler.png
 Beschreibung:

Download
 Dateiname:  fehler.png
 Dateigröße:  6.93 KB
 Heruntergeladen:  372 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.04.2013, 09:06     Titel:
  Antworten mit Zitat      
Hallo,

bitte am besten Testdaten und den genauen Code zur Verfügung stellen.

Was mich erstaunt ist, dass du negative Werte bekommst.

Das Problem der durchgezogenen Linie hatte ich ja schon angesprochen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
freddy123
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 27.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2013, 10:52     Titel:
  Antworten mit Zitat      
Code:
load matlab.mat
dataMenge = beispiel
x1 = find(dataMenge >= 30);
x2 = find(dataMenge == 0);
x3 = find(diff(dataMenge) > dataMenge(1:end-1)*10);
 
plot(x1,dataMenge(x1),'r')
hold on;
plot(x2,dataMenge(x2),'g')
plot(x3,dataMenge(x3),'b')
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

jetzt bräuchten wir nur noch die matlab.mat.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
freddy123
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 27.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2013, 02:29     Titel:
  Antworten mit Zitat      
könnt ihr bitte die dateiendung auf .mat umbennen. ich konnte keine .mat dateien hochladen, sorry

matlab.h
 Beschreibung:

Download
 Dateiname:  matlab.h
 Dateigröße:  54.02 KB
 Heruntergeladen:  241 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2013, 09:47     Titel:
  Antworten mit Zitat      
Hallo,

neuer Vorschlag:

Code:
load matlab.mat
dataMenge = beispiel;
x1 = find(dataMenge >= 30);
x2 = find(dataMenge == 0);
x3 = find(diff(dataMenge) > abs(dataMenge(1:end-1)*10+1))+1;
plot(dataMenge)
hold on;
plot(x1,dataMenge(x1),'ro')
plot(x2,dataMenge(x2),'go')
plot(x3,dataMenge(x3),'mo')

Die Anpassung mit o hatte ich ja schon vorgeschlagen.
Bei x3: das eine "+1" hast du selbst vorgeschlagen, das andere ist, damit der Punkt nach dem Sprung und nicht der vorher markiert wird. Das "abs" habe ich reingenommen, weil sonst jeder Anstieg erfasst wird, wenn der vorherige Wert negativ war.

Mich haben die negativen Niederschläge verwundert, aber das ist ja ein Problem der Daten.

Grüße,
Harald
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.