2015-12-03 4 views
5

Bei dem Versuch, liefern können this question, eine Art und Weise zu beantworten, war das gewünschte Grundstück zu erstellen geom_dotplot von ggplot2 wie folgt zu verwenden:manuell eine Legende zu schaffen, wenn Sie nicht eine Farbe ästhetische

library(ggplot2) 
library(reshape2) 

CTscores <- read.csv(text="initials,total,interest,slides,presentation 
CU,1.6,1.7,1.5,1.6 
DS,1.6,1.7,1.5,1.7 
VA,1.7,1.5,1.5,2.1 
MB,2.3,2.0,2.1,2.9 
HS,1.2,1.3,1.4,1.0 
LS,1.8,1.8,1.5,2.0") 

CTscores.m = melt(CTscores, id.var="initials") 

ggplot(CTscores.m, aes(x=variable, y=value)) + 
    geom_dotplot(binaxis="y", stackdir="up",binwidth=0.03) + 
    theme_bw()+coord_flip() 

enter image description here

Um die Punkte zu unterscheiden, wäre es bequem, nur Farbe hinzuzufügen, aber geom_dotplot Drosseln auf Farbe und stapeln sie nicht am Ende:

ggplot(CTscores.m, aes(x=variable, y=value, fill=initials)) + 
    geom_dotplot(binaxis="y", stackdir="up",binwidth=0.03,color=NA) + 
    theme_bw()+coord_flip() 

enter image description here

Farbe kann manuell einen Hack, obwohl mit hinzugefügt:

gg_color_hue <- function(n) { 
    hues = seq(15, 375, length=n+1) 
    hcl(h=hues, l=65, c=100)[1:n] 
} 

cols <- rep(gg_color_hue(6),4) 

ggplot(CTscores.m, aes(x=variable, y=value)) + 
    geom_dotplot(binaxis="y", stackdir="up",binwidth=0.03,fill=cols,color=NA) + 
    theme_bw()+coord_flip() 

enter image description here

Leider gibt es keine Legende. Darüber hinaus können wir aes(fill=) nicht verwenden, um zu versuchen, eine Legende manuell hinzuzufügen, da dadurch die Punkte minimiert werden. Gibt es eine Möglichkeit, eine Legende hinzuzufügen, ohne aes() zu verwenden?

+0

Sie die gleiche Methode in den Antworten, wie verwendet nutzen könnten, um [diese Frage] (http://stackoverflow.com/q/1364 9473/1412059). – Roland

+0

@Roland Das hat es getan. Vielen Dank. –

Antwort

1

Mit Hilfe des gtable Pakets erhalten Sie die Legende vom Grundstück mit der Legende extrahieren, die die Punkte und fügen Sie diese Legende mit grid.arrange vom gridExtra Paket zum Grundstück mit der farbigen am gestapelten Punkte stapeln ausfallen wie folgt:

p1 <- ggplot(CTscores.m, aes(x=variable, y=value)) + 
    geom_dotplot(binaxis="y", stackdir="up", binwidth=0.03, fill=cols, color=NA) + 
    coord_flip() + 
    theme_bw() 

p2 <- ggplot(CTscores.m, aes(x=variable, y=value, fill=initials)) + 
    geom_dotplot(binaxis="y", stackdir="up", binwidth=0.03, color=NA) + 
    coord_flip() + 
    theme_bw() 

library(gtable) 
fill.legend <- gtable_filter(ggplot_gtable(ggplot_build(p2)), "guide-box") 
legGrob <- grobTree(fill.legend) 

library(gridExtra) 
grid.arrange(p1, legGrob, ncol=2, widths = c(4,1)) 

die gibt:

enter image description here

Verwandte Themen