Seite 1 von 2
Wie erstelle ich ein contour plot?
Verfasst: Mo Apr 29, 2019 5:01 pm
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.
Re: Wie erstelle ich ein contour plot?
Verfasst: Mo Apr 29, 2019 8:45 pm
von EDi
Re: Wie erstelle ich ein contour plot?
Verfasst: Mo Apr 29, 2019 9:13 pm
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
Re: Wie erstelle ich ein contour plot?
Verfasst: Do Mai 02, 2019 9:23 am
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
Re: Wie erstelle ich ein contour plot?
Verfasst: Do Mai 02, 2019 10:18 am
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
Re: Wie erstelle ich ein contour plot?
Verfasst: Do Mai 02, 2019 2:21 pm
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?
Re: Wie erstelle ich ein contour plot?
Verfasst: Fr Mai 03, 2019 12:56 pm
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
Re: Wie erstelle ich ein contour plot?
Verfasst: Fr Mai 03, 2019 2:32 pm
von johannes
Danke, habs hinbekommen:
Re: Wie erstelle ich ein contour plot?
Verfasst: Fr Mai 03, 2019 3:26 pm
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.
Re: Wie erstelle ich ein contour plot?
Verfasst: Sa Mai 04, 2019 8:39 am
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:
Gruß, Jörg