Datenpunkte in geom_point einfärben
Re: Datenpunkte in geom_point einfärben
Hi Hufeisen,
Nicht ganz. Die Bild Struktur soll so sein wie im "rot-schwarzen" Bild.
D.h.
1: auf der Y Achse soll nur nach high/mid und low unterschieden werden (jetzt stehen da alle "Location.Treatment" Kombinationen)
2: Innherhalb einer Location (high, mid, low) soll es zwei "Datenwolken " geben. Eine für "Con" und eine für "Damaged" (im alten bild Rot und Schwarz).
3: Die zwei Datenwolken pro location sollen sich nicht überlappen aber sich zusammen optisch abgrenzen von den anderen Datenwolken
(-->ich suche nach einer Möglichkeit das Rot/Schwarze Bild nachzustellen. Die einzige Abänderung ist, dass die Datenpunkte nicht rot und schwarz sein sollen sondern nach Genotyp eingefärbt werden sollen)
Ich habe mir die Zähne daran ausgebissen. Irgendwie muss das doch gehen...?
Nicht ganz. Die Bild Struktur soll so sein wie im "rot-schwarzen" Bild.
D.h.
1: auf der Y Achse soll nur nach high/mid und low unterschieden werden (jetzt stehen da alle "Location.Treatment" Kombinationen)
2: Innherhalb einer Location (high, mid, low) soll es zwei "Datenwolken " geben. Eine für "Con" und eine für "Damaged" (im alten bild Rot und Schwarz).
3: Die zwei Datenwolken pro location sollen sich nicht überlappen aber sich zusammen optisch abgrenzen von den anderen Datenwolken
(-->ich suche nach einer Möglichkeit das Rot/Schwarze Bild nachzustellen. Die einzige Abänderung ist, dass die Datenpunkte nicht rot und schwarz sein sollen sondern nach Genotyp eingefärbt werden sollen)
Ich habe mir die Zähne daran ausgebissen. Irgendwie muss das doch gehen...?
Re: Datenpunkte in geom_point einfärben
Dann gehe ich einfach mal auf deinen Code zurück. Das habe ich bisher vermieden, weil ich nicht alles davon kenne. Außer einer handvoll Grafiken für den Eigenbedarf und 2 Stunden R for Data Science im Zug habe ich mit ggplot2 keine Erfahrung. Alles was ich bisher gemacht habe, war probieren, um zu verstehen. Aber mit deinem und meinem Code geht es natürlich, wenn man den zusammenlegt. Nur die Legende ist mir weiterhin ein Rätsel. Zwei Zeilen, die (mir) nur Ärger machen, habe ich auskommentiert.
So, ja?
Naja, und mit meiner Lösung hätte ich gerne noch das gleiche Ergebnis. Aber dafür habe ich keine Zeit...
So, ja?
Code: Alles auswählen
# die ursprüngliche Grafik in bunt, Code etwas aufgeräumt
plot_CT <- ggplot(data) +
# Style
coord_flip()+
theme_classic()+
# Change title
theme(plot.title = element_text(color = "black", size = 17, face = "bold"))+
# Change axis
theme(axis.text = element_text(size = 12),
axis.title = element_text(size = 17))+
labs(title = "", x = "", y = "CT (% dw)") +
scale_x_discrete("Location",labels = c("Low", "Mid", "High"), expand=c(0.1, 0.5))+
# Plot data
stat_summary(mapping = aes(x = Location, y = CT, colour = Treatment), fun.data = data_summary, position = pd1, geom = "errorbar", width = 0.05) +
stat_summary(mapping = aes(x = Location, y = CT, colour = Treatment, shape = Treatment), fun.data = data_summary, position = pd1, geom = "point", size = 2) +
geom_point(mapping = aes(x = Location, y = CT, colour = Genotype), position = position_jitterdodge(dodge.width = 0.8, jitter.height = 0, jitter.width = 0.2),
alpha = 0.7) +
# Legend
# scale_color_manual(labels=c("Control", "Damaged"),values=c("red","black"),guide = guide_legend(reverse = TRUE) ) +
# scale_shape_manual(labels=c("Control", "Damaged"),name="Treatment",values = c(16, 16), guide = guide_legend(reverse = TRUE) )
# Behelfslösung
guides(color = FALSE)
Plot_CT
Re: Datenpunkte in geom_point einfärben
Hmmm....
das scheint nicht wirklich die Lösung zu sein oder?
Ich denke soweit war ich in meinem Ausgangspost auch schon.
Vielen Dank trotzdem für deine Mühe.
das scheint nicht wirklich die Lösung zu sein oder?
Ich denke soweit war ich in meinem Ausgangspost auch schon.
Vielen Dank trotzdem für deine Mühe.
Re: Datenpunkte in geom_point einfärben
Also die Datenpunkte sind bunt und du hast nur eine Legende (wenn auch nicht formatiert). Was noch ungelöst ist, ist die Position der Punktwolken, die in deinem ursprünglichen Plot schön separiert sind und in meinen nicht. Richtig? Ich kann deine Grafik mit deinem Code exakt reproduzieren, also es ist kein Versionsproblem. Aus deinem Beispiel ist folgender, minimaler Code ausreichend, um separierte Punktwolken zu erzeugen:
Mein Code auf die gleichen Zeilen verkürzt sieht aber anders aus. Es kann also nur daran liegen, dass du die aesthetics global übergibst und ich lokal (was nötig ist, um colour in verschiedenen layern verschiedenen Variablen zuzuweisen).
Wenn das so ist, müsste es mit deiner globalen Lösung und dem Befehl inherit.aes = FALSE im betreffenden Layer gehen. Ich muss gleich einen Sandkasten streichen und setze mich heute Abend noch mal dran.
Code: Alles auswählen
ggplot(data, aes(x = Location, y = CT, colour = Treatment, shape = Treatment)) +
geom_point(position = position_jitterdodge(dodge.width = 0.8, jitter.height = 0, jitter.width = 0.2),
alpha = 0.7)
Code: Alles auswählen
ggplot(data = data) +
geom_point(mapping = aes(x = Location, y = CT, colour = Genotype, shape = Treatment), position = position_jitterdodge(dodge.width = 0.8, jitter.height = 0, jitter.width = 0.2),
alpha = 0.7)
Re: Datenpunkte in geom_point einfärben
Für mein Verständnis ist es jederzeit möglich, die "globalen" Setzungen im Aufruf von ggplot2 "lokal" (in den verwendeten geoms) zu overrulen!?Es kann also nur daran liegen, dass du die aesthetics global übergibst und ich lokal (was nötig ist, um colour in verschiedenen layern verschiedenen Variablen zuzuweisen).
Re: Datenpunkte in geom_point einfärben
Ja, unmöglich ist es nicht. Ich kenne mich mit ggplot2 nicht genügend aus, um beurteilen zu können, ob global/lokal nur ein stilistischer Unterschied ist oder ob es tatsächlich Auswirkungen auf den Plot hat (so wie ich es hier vermute). Ich werde das heute Abend mal probieren, was passiert, wenn man lokal etwas anderes setzt als lokal und welche Rolle inherit.aes = FALSE dabei spielt. Die Grammatik der Grafik ist - wie das bei Grammatik oft der Fall ist - nicht so einfach .
Re: Datenpunkte in geom_point einfärben
So, mal kurz mit globalen Parametern getestet. Wenn ich im layer geom_point statt colour = Treatment colour = Genotype angebe, resultiert die unerwünschte Annäherung der Punktwolken. Das passiert auch mit dem Befehl inherit.aes = FALSE.
Code: Alles auswählen
# Variante 1
ggplot(data, aes(x = Location, y = CT, colour = Treatment, shape = Treatment)) +
geom_point(mapping = aes(x = Location, y = CT, colour = Genotype, shape = Treatment), position = position_jitterdodge(dodge.width = 0.8, jitter.height = 0, jitter.width = 0.2),
alpha = 0.7)
# Variante 2 mit inherit.aes = FALSE
ggplot(data, aes(x = Location, y = CT, colour = Treatment, shape = Treatment)) +
geom_point(mapping = aes(x = Location, y = CT, colour = Genotype, shape = Treatment), position = position_jitterdodge(dodge.width = 0.8, jitter.height = 0, jitter.width = 0.2),
alpha = 0.7, inherit.aes = FALSE)