Hallo zusammen,
in meinem aktuellen Projekt messe ich eine Dosis-Wirkungs-Beziehung.
Im Code habe ich einen Beispieldatensatz erstellt der meine Ergebnisse ungefähr abbildet.
Jetzt komme ich zu meiner Frage.
Ich würde gerne einen Boxplot mit einer "metrischen" x Achse erstellen. In diesem Plot würde ich dann gerne die Mediane mit einer Linie verbinden. Wenn nun die x Achse des Boxplots nicht kategorial sondern metrisch skaliert wäre würde die Linie die durch die Mediane verläuft eine Sättigungskurve ergeben.
Ist so eine Darstellung mit R möglich und wenn Ja Wie?
Für eure Hilfe wäre ich sehr Dankbar!
Viele Grüße
Robert
library(ggplot2)
library(ggpubr)
library(tidyr)
#Beispieldatensatz
set.seed(2022)
d_10 <- rnorm(n=50,mean=50,sd=12)
d_15 <- rnorm(n=50,mean=70,sd=10)
d_20 <- rnorm(n=50,mean=90,sd=8)
d_30 <- rnorm(n=50,mean=112,sd=6)
d_40 <- rnorm(n=50,mean=120,sd=6)
data <- data.frame(d_10,d_15,d_20,d_30,d_40)
tidydata <- pivot_longer(data,cols = c("d_10","d_15","d_20","d_30", "d_40")
,names_to = "Dosis",values_to = "Readout")
stable <- desc_statby(tidydata, measure.var = "Readout",grps = "Dosis")
#Boxplot
plot1 <- ggplot(tidydata, aes(x = Dosis, y = Readout)) +
geom_boxplot(outlier.color = NA) +
geom_jitter(aes(), width =.2) +
xlab("Dosis") + ylab("Readout") + ylim(0, 150)
plot1
#Lineplot
x <- c(10,15,20,30,40)#xAchse
plot2 <- ggplot(stable,aes(x=x,y=median)) +
geom_point()+ geom_line()+
xlab("Dosis") + ylab("Readout") +
ylim(0, 150)
plot2
Boxplot mit Metrischer x-achsen Skalierung
-
- Beiträge: 12
- Registriert: Mo Jun 15, 2020 10:42 am
Re: Boxplot mit Metrischer x-achsen Skalierung
Hallo,
suchst Du sowas?
Zusatztipp: Ich persönlich mag als Alternative zu geom_jitter gerne geom_beeswarm aus dem Paket ggbeeswarm wie in
LG,
Bernhard
suchst Du sowas?
Code: Alles auswählen
library(ggplot2)
library(tidyr)
#Beispieldatensatz
set.seed(2022)
d_10 <- rnorm(n=50,mean=50,sd=12)
d_15 <- rnorm(n=50,mean=70,sd=10)
d_20 <- rnorm(n=50,mean=90,sd=8)
d_30 <- rnorm(n=50,mean=112,sd=6)
d_40 <- rnorm(n=50,mean=120,sd=6)
data <- data.frame(d_10,d_15,d_20,d_30,d_40)
tidydata <- pivot_longer(data,cols = c("d_10","d_15","d_20","d_30", "d_40")
,names_to = "Dosis",values_to = "Readout")
tidydata$Dosis.metrisch <- rep(c(10, 15, 20, 30, 40), 50) # woher soll R wissen, welcher metrische Wert hinter "d_10" steht?
mediane <- data.frame(x = c(10, 15, 20, 30, 40), # Mediane berechnen außerhalb von Grafikfunkionen. Dann hat man sie auch für später
y = tapply(tidydata$Readout, tidydata$Dosis, median))
plot1 <- ggplot(tidydata) +
geom_boxplot(aes(x = Dosis.metrisch, y = Readout, group = Dosis)) + # wir setzen x auf den metrischen und group auf den factor Wert
geom_jitter(aes(x = Dosis.metrisch, y = Readout), width =.2) +
geom_line(aes(x = x, y = y), data = mediane, size = 4, alpha = .4, col = "violet") +
xlab("Dosis") + ylab("Readout") + ylim(0, 150) +
theme_bw()
plot1
Code: Alles auswählen
library(ggbeeswarm)
plot2 <- ggplot(tidydata) +
geom_boxplot(aes(x = Dosis.metrisch, y = Readout, group = Dosis)) +
geom_beeswarm(aes(x = Dosis.metrisch, y = Readout), alpha = .2) +
geom_line(aes(x = x, y = y), data = mediane, size = 2, alpha = .4, col = "blue") + # beachte das data Argument, mit dem wir einen anderen Dataframe anwenden als den in ggplot() genannten
xlab("Dosis") + ylab("Readout") + ylim(0, 150) +
theme_bw()
plot2
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
-
- Beiträge: 12
- Registriert: Mo Jun 15, 2020 10:42 am
Re: Boxplot mit Metrischer x-achsen Skalierung
Lieber Bernhard,
genau das habe ich gesucht!
Ich danke dir sehr für deine Mühe und die Lösung die du mir geliefert hast!
VG
Robert
genau das habe ich gesucht!
Ich danke dir sehr für deine Mühe und die Lösung die du mir geliefert hast!
VG
Robert