2016-01-29 7 views
5

I grafici a torta:Come posso rimuovere la spaziatura nei grafici a torta in Multi Panel e hanno solo una leggenda in alto utilizzando r

Initial pie charts diagram

IL LINK AI DATI: https://drive.google.com/file/d/0BwoPt0jyGdzORkM3cVA0WjJodVk/view?usp=sharing

Mydata<-read.csv(file="final_analysis_candy_analysis.csv",head=TRUE,sep=",") 

dhfr.Arg <- table(Mydata$dhfr.Arg.59.163.137.)  
dhfr.Ile <- table(Mydata$dhfr.Ile.51.214.65.)  
dhfr.Asn108 <- table(Mydata$dhfr.Asn108.328.372.) 
glu.540 <- table(Mydata$glu.540.538.326.200.)  
gly.437 <- table(Mydata$gly.437.848.300.) 

library(plotrix) 

par(op) 
op <-par(mfrow=c(2,3),mar=c(0,0,1,0)) 
pct <- round(dhfr.Arg/sum(dhfr.Arg)*100) 
lbls <- paste(names(dhfr.Arg), pct) # add percents to labels  
lbls <- paste(lbls,"%",sep="") # ad % to labels  
lp<-pie3D(dhfr.Arg,radius=0.8,labels=lbls,explode=0.1, 
labelrad=1.4,main="dhfr Arg 59(163,137)")  
pct <- round(dhfr.Ile/sum(dhfr.Ile)*100)  
lbls <- paste(names(dhfr.Ile), pct) # add percents to labels  
lbls <- paste(lbls,"%",sep="") # ad % to labels 
lp<-pie3D(dhfr.Ile,radius=0.8,labels=lbls,explode=0.1, 
    labelrad=1.4,main="dhfr Ile 51(214,65)")  
pct <- round(dhfr.Asn108/sum(dhfr.Asn108)*100)  
lbls <- paste(names(dhfr.Asn108), pct) # add percents to labels  
lbls <- paste(lbls,"%",sep="") # ad % to labels  
lp <- pie3D(dhfr.Asn108,radius=0.8,labels=lbls,explode=0.1, 
    labelrad=1.4,main="dhfr Asn108(328,372)") 
pct <- round(glu.540/sum(glu.540)*100)  
lbls <- paste(names(glu.540), pct) # add percents to labels 
lbls <- paste(lbls,"%",sep="") # ad % to labels  
lp<-pie3D(glu.540,radius=0.8,labels=lbls,explode=0.1, 
    labelrad=1.4,main="glu 540(538,326,200)")  
pct <- round(gly.437/sum(gly.437)*100) 
lbls <- paste(names(gly.437), pct) # add percents to labels  
lbls <- paste(lbls,"%",sep="") # ad % to labels 
lp <- pie3D(gly.437,radius=0.8,labels=lbls,explode=0.1, 
    labelrad=1.4,main="gly 437(848,300)") 
par(op) 

pie charts with white space marked in black

+5

Potete fornire un esempio riproducibile (prendere da 'file di aiuto pie3D', per esempio)? Non molte persone sono in grado di eseguire il tuo script senza i tuoi dati. –

+0

Ho aggiunto un collegamento ai dati – andy

+1

Si prega di inserire i dati nella tua domanda in quanto il tuo link potrebbe andare offline senza preavviso, rendendo la tua domanda meno degna in futuro. Una torta è sufficiente, che può essere tracciata molte volte per mostrare l'effetto desiderato. @Cath Penso che l'OP voglia meno spazio tra le singole torte. –

risposta

2

Utilizzando una visualizzazione 2D la trama sarà molto più semplice da comprendere. Pertanto, una soluzione 2D alternativo con ggplot:

# load needed packages 
library(data.table) 
library(ggplot2) 
library(scales) 

# process & summarise the data (with data.table) 
mydat <- melt(setDT(Mydata), 
       id=1, 
       measure.vars=4:8)[, .N, by = .(variable,value) 
           ][, `:=` (perc = round(N/sum(N),2), 
              pos = cumsum(N)-0.5*N), by = variable] 

# create the plot with ggplot2 & scales 
ggplot(mydat) + 
    geom_bar(stat="identity", aes(x="", y=N, fill=value)) + 
    geom_text(aes(x = "", y = pos, label = percent(perc))) + 
    scale_x_discrete(expand = c(0,0)) + 
    scale_y_continuous(expand = c(0,0)) + 
    coord_polar(theta = "y") + 
    facet_grid(.~ variable, scales = "free") + 
    theme_minimal(base_size = 16) + 
    theme(axis.title = element_blank(), axis.text = element_blank(), 
     panel.grid = element_blank(), legend.title = element_blank()) 

che dà il seguente grafico:

enter image description here

Vedere this answer per come calcolare la variabile pos con base R o con il plyr e dplyr pacchetti.


Tuttavia, i grafici a torta non sono per lo più il modo migliore per visualizzare i dati. Anche in questo caso un grafico a bart comporterà una visualizzazione più chiara. Con:

ggplot(mydat, aes(x=variable, y=perc, fill=value)) + 
    geom_bar(stat="identity", aes(label = percent(perc)), width=0.6) + 
    scale_y_continuous(labels = percent(c(0,0.25,0.50,0.75,1.00))) + 
    coord_flip() + 
    theme_minimal(base_size = 14) + 
    theme(axis.title = element_blank(), legend.title = element_blank()) 

si ottiene:

enter image description here

+0

Amo l'aiuto e le tue soluzioni. molte grazie. mi ha aiutato molto – andy

+0

@ felice contento di aver potuto aiutare; per metodi alternativi per la creazione della variabile 'pos', vedi [questa risposta] (http://stackoverflow.com/a/22804400/2204410) – Jaap

1

Da plotrix documentation, c'è un parametro di margine mar - Margini attorno alla torta. Vedere default è impostato su mar=c(4,4,4,4) che sta creando questo spazio bianco.

pie3D(x,edges=NA,radius=1,height=0.1,theta=pi/6,start=0,border=par("fg"), 
    col=NULL,labels=NULL,labelpos=NULL,labelcol=par("fg"),labelcex=1.5, 
    labelrad=1.25,sector.order=NULL,explode=0,shade=0.8,mar=c(4,4,4,4),pty="s",...) 

impostazione mar di piccoli importi, in modo da aggiungere nella vostra pie3D Prova chiama questa opzione, per esempio mar =c(1,1,1,1) per ridurre tutti i margini.

+0

hai ragione ho dovuto usare i margini migliori.grazie per la soluzione. grazie mille – andy

Problemi correlati