Wie erstelle ich ein contour plot?

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

johannes
Beiträge: 12
Registriert: Mo Apr 29, 2019 4:43 pm

Wie erstelle ich ein contour plot?

Beitrag von johannes »

Hallo,

ich habe bisher kaum mit R (Studio) gearbeitet. Nun muss ich aus einer Tabelle ein Contour plot erstellen. Ich habe schon einige Funktionen ausprobiert, jedoch kommt nie das raus, was ich haben möchte.

Bei meinen Daten handelt es sich um eine Tabelle mit 10 Spalten und etlichen Zeilen (13.200). Die ersten 3 Spalten brauche ich (X-Wert in Metern, Y-Wert in Metern, Temperatur in Kelvin).

Das Problem ist jetzt, dass in den ersten 110 Zeilen erst mal ein und der gleiche x-Wert steht (25), mit 110 Y-Werten und den dazugehörigen Temperaturen steht. Ab Zeile 111 fängt es dann mit dem 2. X-Wert (50) an und es folgen 110 Werte für Y und Temp. des X Wertes 50.. usw.
Ich komme einfach nicht drauf, wie ich aus den so geordneten Daten eine Grafik bekomme.

Viell. kennt sich jemand damit aus. Ich hoffe, habe mein Problem halbwegs verständlich dargestellt.
Danke für die Hilfe.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Wie erstelle ich ein contour plot?

Beitrag von EDi »

Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Wie erstelle ich ein contour plot?

Beitrag von jogo »

Hallo Johannes,

willkommen im Forum!
Was funktioniert dann an dem Plot mit contour() nicht?
Machst Du alles so, wie es im Hilfetext der Funktion steht?

Gruß, Jörg
johannes
Beiträge: 12
Registriert: Mo Apr 29, 2019 4:43 pm

Re: Wie erstelle ich ein contour plot?

Beitrag von johannes »

Hallo Jörg,

mein erstes Problem ist, dass die Werte, welche ich darstellen möchte, nicht wie in einem Raster dargestellt sind. Die dazugehörigen x und y Werte habe ich zwar auch in der Tabelle, jedoch müsste man diese erst mal zuordnen. Ich habe mir die vorinstallierte Datei "volcano" angeschaut. Hier sind die darzustellenden Werte sortiert (Bild volcano).
Hätte ich meine Daten (Bild data) so angeordnet, würde mir das schon sehr helfen, denke ich.

Viele Grüße,
Johannes
Zuletzt geändert von johannes am Do Mai 02, 2019 3:01 pm, insgesamt 1-mal geändert.
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Wie erstelle ich ein contour plot?

Beitrag von jogo »

Hallo Johannes,

das Problem der Transformation der Daten fällt wahrscheinlich in den Bereich "from long to wide"
https://stackoverflow.com/questions/589 ... ide-format

Vielleicht hilft Dir die Funktion xtabs() - das ist die einfachste Variante, wenn der Leistungsumfang der Funktion einem ausreicht.

Gruß, Jörg
johannes
Beiträge: 12
Registriert: Mo Apr 29, 2019 4:43 pm

Re: Wie erstelle ich ein contour plot?

Beitrag von johannes »

Danke für die schnelle Antwort. Ich habs mal so versucht, hat jedoch nicht geklappt. Kam total verwirrender Datensalat raus.

Ich habe jetzt eine andere Lösung gefunden, und zwar die Funktion plot_ly.

Leider habe ich nun hier das Problem, dass ich nicht nur den für mich interessanten Bereich darstellen kann, sondern immer alles dargestellt wird. Für mich wäre lediglich der Bereich 0-10 auf der y - Achse interessant. Hättest Du dafür eine Lösung parat?
Dateianhänge
plot_ly.JPG
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Wie erstelle ich ein contour plot?

Beitrag von jogo »

Hallo Johannes,

ohne Daten fühle ich mich nicht in der Lage, konkrete Hinweise zu geben.
viewtopic.php?f=20&t=11
https://stackoverflow.com/questions/596 ... le-example

Gruß, Jörg
johannes
Beiträge: 12
Registriert: Mo Apr 29, 2019 4:43 pm

Re: Wie erstelle ich ein contour plot?

Beitrag von johannes »

Danke, habs hinbekommen:
Zuletzt geändert von johannes am Fr Mai 03, 2019 4:07 pm, insgesamt 1-mal geändert.
johannes
Beiträge: 12
Registriert: Mo Apr 29, 2019 4:43 pm

Re: Wie erstelle ich ein contour plot?

Beitrag von johannes »

Danke, habs hinbekommen:

Code: Alles auswählen

# Ordnerpfad auswählen
setwd("...")

# Tabelle einlesen
dateiname <- ".....dat"
table <- read.table(dateiname, header = TRUE)

# Parameterauswahl: T = Temperatur ...
Parameter <- "T"
von <- 285
bis <- 290
# Achsen erstellen
a <- seq(from = 25, to = 5975, by = 50)
b <- c( 0.0150, table$Z[2:110])

Breite <- table$X
Hoehe <- table$Z
Temp <- table$T

# Schriftgröße 
font_size <- 0.7

# Matrix erstellen
mtrx1 <- acast(table, Breite~Hoehe, value.var=Parameter) 
# falsch rum mtrx2 <- acast(table28, Hoehe~Breite, value.var = "Parameter")

# Maßeinheiten
inMeter <- function(x) {
  paste0(x, " m")
}
inCelsius <- function(x) {
  paste0(x, " K")
}

# contour anzeigen
filled.contour(x= a, y=b, mtrx1,
               xlim = range(a, finite = TRUE),
               ylim = range(0, 10, finite = TRUE),
               zlim = range(von, bis, finite = TRUE), 
               plot.axes = { 
                 #axis(1, labels = inMeter(a), at = as.numeric(a), las =1 , cex.axis = 0.7) # x-Achse
                 #axis(2, labels = inMeter(b), at = as.numeric(b), las =1, cex.axis = 0.5) # y-Achse
                 axis(1, at = NULL, cex.axis = font_size) # x-Achse
                 axis(2, at = NULL, cex.axis = font_size) # y-Achse
               },
               key.axes = {
                 axis(4, at = pretty(Temp), labels = inCelsius(pretty(Temp))) 
               })
Nun stellt sich mir nur noch die Frage, wie ich das ganze als img oder pdf speichern kann und wie ich der Skala einen Titel geben und diese mit festen Werten beschriften kann, die nicht verschwinden, wenn meine Werte im Diagramm nicht bis in diesen Bereich kommen.
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Wie erstelle ich ein contour plot?

Beitrag von jogo »

Hallo Johannes,

um eine Grafik in einer PDF-Datei abzulegen, verwendet man die Funktion pdf():

Code: Alles auswählen

pdf(...) # Datei anlegen/öffnen
... # Grafik erzeugen
dev.off() # Datei schließen
Welches Format meinst Du mit img? Schau bitte mal hier:

Code: Alles auswählen

help("png")
Gruß, Jörg
Antworten