Datenpunkte in geom_point einfärben

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

eimichae
Beiträge: 36
Registriert: Mo Okt 10, 2016 8:48 pm

Re: Datenpunkte in geom_point einfärben

Beitrag von eimichae »

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...?
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Datenpunkte in geom_point einfärben

Beitrag von Hufeisen »

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?

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
Naja, und mit meiner Lösung hätte ich gerne noch das gleiche Ergebnis. Aber dafür habe ich keine Zeit...
forum_final.png
eimichae
Beiträge: 36
Registriert: Mo Okt 10, 2016 8:48 pm

Re: Datenpunkte in geom_point einfärben

Beitrag von eimichae »

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.
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Datenpunkte in geom_point einfärben

Beitrag von Hufeisen »

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:

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)
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).

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) 
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.
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Datenpunkte in geom_point einfärben

Beitrag von Athomas »

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).
Für mein Verständnis ist es jederzeit möglich, die "globalen" Setzungen im Aufruf von ggplot2 "lokal" (in den verwendeten geoms) zu overrulen!?
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Datenpunkte in geom_point einfärben

Beitrag von Hufeisen »

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 :lol:.
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Datenpunkte in geom_point einfärben

Beitrag von Hufeisen »

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)
Antworten