Grafik mit 5 Linien

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Robin
Beiträge: 1
Registriert: Sa Jan 14, 2023 10:05 pm

Grafik mit 5 Linien

Beitrag von Robin »

Hallo zusammen,

ich habe folgenden Output:

head(pred_conf)
fit lwr upr
1 14.92164 11.42516 18.41812
2 14.91007 11.41747 18.40267
3 14.89850 11.40979 18.38722
4 14.88693 11.40210 18.37177
5 14.87536 11.39441 18.35632
6 14.86379 11.38672 18.34086
> head(pred_ind)
fit lwr upr
1 14.92164 7.258563 22.58472
2 14.91007 7.248763 22.57138
3 14.89850 7.238963 22.55804
4 14.88693 7.229160 22.54470
5 14.87536 7.219356 22.53137
6 14.86379 7.209550 22.51804

Dazu möchte ich jetzt eine Grafik mit 5 Linien erstellen:
Die Punkte aus der Spalte "fit" (sind für beide Outputs identisch), für die Werte lwr & upr aus dem oberen Output sowie die Werte für lwr & upr aus dem unteren Output.

Wie gehe ich hier vor?

Vielen Dank!

VG
Robin
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Grafik mit 5 Linien

Beitrag von bigben »

Hallo,

besser ist es immer, die Daten nicht als Output, sondern in einer in R lesbaren Form anzugeben. Kannst Du mit dem folgenden was anfangen?

Code: Alles auswählen

# Du solltest die Daten in passender Form schon in R haben, wir greifen hier Dein Beispiel auf
a <- read.table(header = TRUE, text =
                  "line fit lwr upr
1 14.92164 11.42516 18.41812
2 14.91007 11.41747 18.40267
3 14.89850 11.40979 18.38722
4 14.88693 11.40210 18.37177
5 14.87536 11.39441 18.35632
6 14.86379 11.38672 18.34086")

b <- read.table(header = TRUE, text =
                  "line fit lwr upr
1 14.92164 7.258563 22.58472
2 14.91007 7.248763 22.57138
3 14.89850 7.238963 22.55804
4 14.88693 7.229160 22.54470
5 14.87536 7.219356 22.53137
6 14.86379 7.209550 22.51804")


# Neuen Plot anlegen mit plot
plot(x = a$fit, y = a$lwr, col = 1, lty = 1, pch = 15, type = "b",
     xlim = c(14.85, 14.95), ylim = c(7, 23), 
     xlab = "Beschriftung X-Achse", ylab = "Beschriftung Y-Achse",
     main = "Robins plot")

# ggf. Gitternetzlinien mit abline
abline(h = c(1:30), col="lightgrey", lty = 3)
abline(v = seq(14, 15, .005), col = "lightgrey", lty = 3)

# bislang noch fehlende Werte einzeichnen
lines(x = a$fit, y = a$upr, col = 1, lty = 2, pch = 15, type = "b")
lines(x = b$fit, y = b$lwr, col = 2, lty = 1, pch = 16, type = "b")
lines(x = b$fit, y = b$upr, col = 2, lty = 2, pch = 16, type = "b")

# noch schicker wird es mit einer Legende
legend("topright", col = c(1,2), pch = c(15, 16), 
       legend = c("a in schwarz", "b in rot"), inset = .01)
Rplot01.pdf
(6.31 KiB) 30-mal heruntergeladen

Wenn Du die Zeilen der Reihe nach einzeln ausführen lässt dann siehst Du, was welche Zeile bewirkt und kannst das ggf. noch für Deine Zwecke anpassen. Die Bedeutung von Grafikparametern wie col, pch und lty findest Du mit `help(par)` heraus.

Wenn Du stattdessen lieber das Grafiksystem "ggplot2" verwenden möchtest, dann würde man üblicherweise die Daten erst umstellen. Behelfsmäßig kann man aber grundsätzlich auch sowas hier machen, um einen vergleichbaren Plot ohne Umstellen der Daten zu erreichen, aber so ist das eigentlich nicht gedacht:

Code: Alles auswählen

library(ggplot2)
ggplot(a) +
  geom_line(data = a, mapping = aes(x = fit, y = lwr), col = 1) +
  geom_line(data = a, mapping = aes(x = fit, y = upr), col = 1) + 
  geom_line(data = b, mapping = aes(x = fit, y = lwr), col = 2) +
  geom_line(data = b, mapping = aes(x = fit, y = upr), col = 2) +
  
  geom_point(data = a, mapping = aes(x = fit, y = lwr), pch = 1) +
  geom_point(data = a, mapping = aes(x = fit, y = upr), pch = 1) + 
  geom_point(data = b, mapping = aes(x = fit, y = lwr), pch = 2) +
  geom_point(data = b, mapping = aes(x = fit, y = upr), pch = 2) +
  
  labs(title = "Robins plot", xlab ="fit", ylab ="Y-Beschriftung") +
  theme_bw()
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten