Seite 1 von 2

Abline Plot aus einer Tabelle

Verfasst: Di Feb 09, 2021 4:51 pm
von Moritz F.
Hallo zusammen,

ich möchte mit der Funktion abline 50 verschiedene Linien aus einer Tabelle in einem Plot darstellen.

So habe ich die Funktion immer benutzt.

Code: Alles auswählen

model=lm(y~x)

Code: Alles auswählen

abline(model, col = "red")
Wie aber schaffe ich es einen Plot zu generieren, welcher 50 verschiedene Linien plottet. Die Werte für die Linien stehen in einer Tabelle (Intercept und Slope).

Code: Alles auswählen

abline(tabelle$Intercept,tabelle$Slope)
Hier kann ich eben nur einen Wert ansteuern, ich möchte aber alle 50 Zeilen ansprechen

n Intercept Slope Regressionskoeffizienten
16 4.180543 1.2304688 c(`(Intercept)` = 4.18054329967619, x = 1.23046883896196)
16 5.250820 0.7669453 c(`(Intercept)` = 5.25081984564733, x = 0.766945271154767)
16 4.801265 0.9525827 c(`(Intercept)` = 4.80126479143226, x = 0.95258266650622)
16 4.180543 1.2304688 c(`(Intercept)` = 4.18054329967619, x = 1.23046883896196)
16 5.250820 0.7669453 c(`(Intercept)` = 5.25081984564733, x = 0.766945271154767)
16 5.200474 0.8035034 c(`(Intercept)` = 5.20047419269082, x = 0.803503383191166)
16 5.902599 0.4261399 c(`(Intercept)` = 5.90259941528017, x = 0.426139869690726)
.....................

Vielen Dank für die Hilfe
Moritz

Re: Abline Plot aus einer Tabelle

Verfasst: Mi Feb 10, 2021 2:46 pm
von schubbiaschwilli
Gude!
Wie aber schaffe ich es einen Plot zu generieren, welcher 50 verschiedene Linien plottet.
Ich komme nur auf die Lösung, das über eine Schleife zu machen.
Die Werte für die Linien stehen in einer Tabelle (Intercept und Slope).
Siehe http://www.forum.r-statistik.de/viewtop ... 381#p14381

Dank&Gruß
schbbiaschwilli

Re: Abline Plot aus einer Tabelle

Verfasst: Mi Feb 10, 2021 4:13 pm
von Athomas
Ich kann nur ggplot:

Code: Alles auswählen

library(ggplot2)

Geraden <- data.frame(intercept=runif(50, -2, 2), slope=runif(50, -2, 2), 
                     Farbe=c("red","green","blue","orange","violet"))

Strickmuster <- ggplot(Geraden) +
  theme_bw() +
  geom_abline(aes(slope=slope, intercept=intercept, colour=Farbe)) +
  scale_x_continuous(limits=c(-3,3)) +
  scale_y_continuous(limits=c(-3,3)) + 
  guides(colour=FALSE)
Strickmuster

Re: Abline Plot aus einer Tabelle

Verfasst: Mi Feb 10, 2021 4:30 pm
von schubbiaschwilli
Gude!

OK, dann musst du halt einen entsprechenden Dataframe bauen - Ohne Bauen, nur mit Eintippen also ungefähr so:

Code: Alles auswählen

library(ggplot2)
data <- data.frame(variable=c("a","a","b","b"), x=c(1,10,1,10), y=c(2,3,4,6))
ggplot(data, aes(x=x, y=y, col=variable)) + geom_line()
Dank&Gruß
schbbiaschwilli

Re: Abline Plot aus einer Tabelle

Verfasst: Mi Feb 10, 2021 5:54 pm
von bigben
Wenn explizit nach abline gefragt wird, sind ggplot-Antworten irgendwie nur halb on topic. Fürs Publizieren find ich ggplot2 schöner, aber so einfache Aufgaben hat man mit R jahrzehntelang gut ohne lösen können.

Code: Alles auswählen

bsp <- data.frame(slope = runif(50, .3, .7), intercept = rnorm(50, 2))

# Erst brauchen wir einen Plot, der später die ablines aufnehmen kann
plot(NA, xlim = c(-10, 20), ylim = c(-8,22), xlab="x", ylab="y")
abline(h = 0, lty = 2)
abline(v = 0, lty = 2)
# da hinein malen wir jetzt die ablines
for(i in 1:nrow(bsp))
  abline(bsp$intercept[i], bsp$slope[i], col = rgb(0, 0, 0, .4))


Und sollte das jetzt wegen der for-Schleife nicht passen, geht auch das hier ganz gut:

Code: Alles auswählen

Vectorize(abline)(bsp$intercept, bsp$slope, col = rgb(0, 0, .4, .4))
LG,
Bernhard

Re: Abline Plot aus einer Tabelle

Verfasst: Do Feb 11, 2021 11:24 am
von schubbiaschwilli
Gude!

Hier sieht man den Unterschied Mathematiker vs Programmierer...

Code: Alles auswählen

MinMax <- c(1950, 2020)
alpha <- Ntrend_muenchen$coefficients[1]
beta <- Ntrend_muenchen$coefficients[2]
MinMax_Values <- MinMax*beta + alpha
lines(x=MinMax, y=MinMax_Values, col="green", lwd=2, lty=2)

Code: Alles auswählen

# Erst brauchen wir einen Plot, der später die ablines aufnehmen kann
plot(NA, xlim = c(-10, 20), ylim = c(-8,22), xlab="x", ylab="y")
abline(h = 0, lty = 2)
abline(v = 0, lty = 2)
# da hinein malen wir jetzt die ablines
for(i in 1:nrow(bsp))
  abline(bsp$intercept[i], bsp$slope[i], col = rgb(0, 0, 0, .4))

Re: Abline Plot aus einer Tabelle

Verfasst: Do Feb 11, 2021 8:28 pm
von EDi
Hier sieht man den Unterschied Mathematiker vs Programmierer...
Wer ist was?

Re: Abline Plot aus einer Tabelle

Verfasst: Fr Feb 12, 2021 12:20 am
von bigben
EDi hat geschrieben: Do Feb 11, 2021 8:28 pm
Hier sieht man den Unterschied Mathematiker vs Programmierer...
Wer ist was?
Ich vermute es geht darum, dass schubbiaschwillis' Code aus dem anderen Thread einen deklarativen Stil hat, meine erste Variante ist imperatives Programmieren? Vielleicht auch um den Ansatz, dass schubbiaschwilli als erstes nachgedacht hat, wie man aus den gegebenen Daten geeignete Start- und Endpunkte ausrechnen kann, was Formeln und Berechnungen erfordert, während ich einfach eine Funktion verwendet habe, die die gegebenen Daten direkt als Argument annimmt?

Egal, ob ich nun als Mathematiker (weniger wahrscheinlich) oder als Programmierer (wahrscheinlicher) eingestuft wurde, bedanke ich mich für das Kompliment.

LG,
Bernhard

Re: Abline Plot aus einer Tabelle

Verfasst: Fr Feb 12, 2021 8:33 am
von Athomas
EDi hat geschrieben: Do Feb 11, 2021 8:28 pm
Hier sieht man den Unterschied Mathematiker vs Programmierer...
Wer ist was?
Ich hab's auch nicht verstanden :roll: ...

Re: Abline Plot aus einer Tabelle

Verfasst: Mi Feb 17, 2021 4:17 pm
von schubbiaschwilli
Gude!

OK, ich dachte, Bernhard wäre ITler (wegen dem 'Programmiere stets so...') - Dann würde es passen.
Ich kann es als Mathematiker sehen, also berechne ich die Punkte, oder mache es wie ein Informatiker und suche eine geeignete Funktion.
Eine Verallgemeinerung von: "I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail."

Dank&Gruß
schbbiaschwilli