2017-12-07 1 views
-1

Ich versuche ein Streudiagramm in ggplot2 für R von zwei Variablen (zwei Arten) zu erstellen, die sich farblich unterscheiden, und innerhalb dieser Grafik zeigen Unterschiede innerhalb der zwei Arten basierend auf der Jahreszeit unterschiedlich nach Form. Ich lief in dieses Problem, wenn ich den folgenden Code lautete:Fügen Sie weitere Faktoren zu ggplot scatterplot hinzu, ohne Linien mit zwei Datenrahmen hinzuzufügen

Species<- c('1','1','1','1','1','1','1','1','1','1','2','2','2','2','2','2','2','2','2','2') 
Age<-c('I','M','M','I','I','M','I','M','I','I','I','M','I','M','M','I','I','I','I','M') 
SA<-c(100,90,180,77,65,73,85,87,84,84,82,77,74,65,62,98,120,180,190,100) 
V<-c(40,42,45,55,51,62,73,21,41,61,51,92,54,61,65,32,41,55,56,53) 
PWstats<-data.frame(Species,Age,SA,V) 

PlotSpeciescheck <- ggplot(PWstats,aes(x=log(V), y=log(SA), color=Species, shape=Age)) + 
geom_point() + 
geom_smooth(method=lm) + 
labs(x=expression("Volume ("*cm^3*")"), 
    y=expression("Surface Area ("*cm^2*")")) + 
theme(legend.text = element_text(face="italic")) 

Es mehrere Zeilen für jeden Faktor erzeugt (eine Zeile für Art 1 und Staffel 1, Art 2 und Staffel 1, Art 2 und Saison 1 usw.). Ich möchte nur, dass die Linien die beiden Arten repräsentieren und die jahreszeitlichen Unterschiede als ergänzende Visualisierung haben.

Beachten Sie, dass es vier Linien gibt (eine für Spezies 1 und Alter I, Spezies 2 Alter I, Spezies 1 Alter M und Spezies 2 Alter M), aber ich möchte nur zwei Linien zeigen (Spezies 1 und Spezies 2)) haben aber immer noch unterschiedliche Formen, die verschiedene Altersklassen repräsentieren.

Gibt es einen Weg um dies zu umgehen? Vielen Dank!

+0

Wenn um Hilfe zu bitten, sollten Sie einen [reproduzierbaren Beispiel] umfassen (https://stackoverflow.com/ Fragen/5963269/how-to-make-a-great-r-reproduzierbar-Beispiel) mit Beispiel-Eingabedaten, so dass wir den Code ausführen können, um zu sehen, was vor sich geht. Vielleicht skizzieren, wie die Ausgabe aussehen soll? Ich kann nicht anhand Ihrer Beschreibung sagen, was Sie wollen. – MrFlick

+0

Hallo, bitte lesen Sie [diesen Beitrag] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610) auf, wie Sie eine minimale, reproduzierbare machen Beispiel für R und dann bearbeiten Sie Ihre Frage entsprechend. –

+1

Wenn Sie möchten, dass 'shape' den' geom_point' Layer, nicht aber den 'geom_smooth' Layer beeinflusst, verschieben Sie das ästhetische Mapping in' geom_point' und aus dem globalen 'ggplot' Mapping:' geom_point (aes (shape = Season)) ' – aosmith

Antwort

0

Die Top-Level-Formästhetik bringt die Dinge auf den Kopf. Da Sie nur, dass auf die Punkte anwenden möchten, bewegen Sie einfach die speziell auf diese Ebene

PlotSpeciescheck <- ggplot(PWstats,aes(x=log(V), y=log(SA), color=Species)) + 
    geom_point(aes(shape=Age)) + 
    geom_smooth(method=lm) + 
    labs(x=expression("Volume ("*cm^3*")"), 
     y=expression("Surface Area ("*cm^2*")")) + 
    theme(legend.text = element_text(face="italic")) 

enter image description here

+0

Das ist perfekt! Ich danke dir sehr! – user33993

Verwandte Themen