2013-01-19 23 views
12

ho currrently ho il codice riportato qui di seguito per disegnare questo: enter image description hereDisegno delinea intorno più gruppi geom_point con ggplot

Quello che sto cercando di fare è ottenere il contorno per ciascuno dei gruppi di seguire tutti i punti in ogni gruppo - piuttosto che saltare alcuni di essi come fa attualmente. Inoltre, vorrei che ogni contorno avesse un riempimento semitrasparente. Grazie per qualsiasi aiuto.

library(ggplot2) 
library(reshape) 
library(car) 

G1 <- 1:10 
G2 <- 11:20 
G3 <- 21:30 
G4 <- 31:35 
G5 <- 36:41 

sdata <- read.csv("http://dl.dropbox.com/u/58164604/sdata.csv", stringsAsFactors = FALSE) 
pdata<-melt(sdata, id.vars="Var") 

VarArea <- data.frame(unique(pdata$Var)) 
VarFinalMin <-c() 
for (g in 1:max(VarArea)) 
{ 
VarNum<-pdata[which(pdata$Var==g),1:c(ncol(pdata))] 
VarN <- g 
VarMin <- min(VarNum$value) 
VarMinN <- cbind(VarN, VarMin) 
VarFinalMin <- rbind(VarFinalMin,VarMinN) 
} 
VFinalMin <- data.frame(VarFinalMin) 
colnames(VFinalMin)<-c("Variable", "Value") 

VarFinalMax <-c() 
for (g in 1:max(VarArea)) 
{ 
VarNum<-pdata[which(pdata$Var==g),1:c(ncol(pdata))] 
VarN <- g 
VarMax <- max(VarNum$value) 
VarMaxN <- cbind(VarN, VarMax) 
VarFinalMax <- rbind(VarFinalMax,VarMaxN) 
} 
VFinalMax <- data.frame(VarFinalMax) 
colnames(VFinalMax)<-c("Variable", "Value") 

VFinal<-rbind(VFinalMin, VFinalMax) 
VFinal$Group <- recode(VFinal$Variable, "G1 = 'A'; G2 = 'B'; G3 = 'C'; G4 = 'D'; G5 = 'E'") 

ggplot(VFinal, aes(Variable, Value, colour = Group)) + geom_point() 
find_hull <- function(VFinal) VFinal[chull(VFinal$Variable, VFinal$Value), ] 
hulls <- ddply(VFinal, "Group", find_hull) 
ggplot(VFinal, aes(Variable, Value, colour = Group)) + geom_point() + geom_polygon(data = hulls, fill = NA) 
+2

Screenshot, codice completamente riproducibile comprese le chiamate alle librerie - +1 per una grande domanda. – SlowLearner

risposta

11

Se si riordinano le parti inferiori e le parti superiori delle vostre forme, rispettivamente, ascendente e discendente, si può semplicemente utilizzare geom_polygon sul vostro originale data.frame e saltare tutto il materiale convesso:

VLarge <- VFinal[which(VFinal$Value > 25000),] 
VLarge <- VLarge[order(-VLarge$Variable, VLarge$Group),] 
VSmall <- VFinal[which(VFinal$Value <= 25000),] 
VSmall <- VSmall[order(VSmall$Variable, VSmall$Group),] 
VFinal <- rbind(VSmall, VLarge) 
ggplot(VFinal, aes(Variable, Value, colour = Group)) + geom_point() + 
    geom_polygon(aes(fill = Group), alpha = 0.3) 

enter image description here

+0

Argh, bastonatemi ... Bello uno – SlowLearner

+1

E il riempimento semitrasparente può essere ottenuto modificando l'ultima riga del codice di @ Noel per leggere 'geom_polygon (aes (fill = Gruppo, alpha = 0.3))' – SlowLearner

+0

HT @SlowLearner. Aggiunto alla risposta. – Noah

Problemi correlati