Para hacer un gráfico de Pie con ggplot es necesario efectuar un gráfico de barras, con todas las barras apiladas, después de hacer este gráfico se utiliza la transformación circular coord_polar(theta=“y”) para transformar los valores de las alturas en ángulos. Para este ejemplo necesitaras tener cargada la librería ggplot2 y scales.
library(ggplot2)
library(scales)
#Lo primero es tener el conjunto de datos con categorias y valores
# los valores son porcentajes y deben sumar 100
df<-data.frame(categorias=c("cat1","cat2","cat3","cat4"),
porcentaje=c(25,20,15,40))
# despúes de esto ya podemos hacer nuestro gráfico de barras
ggplot(df,mapping = aes(x="",y=porcentaje, fill=categorias))+
geom_bar(stat = "identity",color="white")
para hacer la transformación usamos coord_polar(theta=“y”) con la “y” le indicamos al programa que lo que queremos cambiar en la geometría son las alturas de las barras.
library(ggplot2)
df
## categorias porcentaje
## 1 cat1 25
## 2 cat2 20
## 3 cat3 15
## 4 cat4 40
ggplot(df,aes(x="",y=porcentaje, fill=categorias))+
geom_bar(stat = "identity",color="white")+
coord_polar(theta="y")
Para agregar los valores como texto utilizamos geom_text(), para hacer esto es es necesario tener el texto que queremos agregar (o sea los porcentajes).
Se hace geom_text(aes(labels=“nuestro texto”),position=postion_stack(vjust=0.5))
library(ggplot2)
ggplot(df,aes(x="",y=porcentaje, fill=categorias))+
geom_bar(stat = "identity",
color="white")+
geom_text(aes(label=porcentaje),
position=position_stack(vjust=0.5))
el parámetro vjust=0.5 hace que los valores se coloquen al 50% de las barras, o sea en medio de cada barra.
para hacer esto hacemos el gggplot()+geom_bar()+geom_text(), agregando los datos, las estéticas y todos los parametros.
ggplot(df,aes(x="",y=porcentaje, fill=categorias))+
geom_bar(stat = "identity",
color="white")+
geom_text(aes(label=porcentaje),
position=position_stack(vjust=0.5),color="white",size=6)+
coord_polar(theta = "y")
ggplot(df,aes(x="",y=porcentaje, fill=categorias))+
geom_bar(stat = "identity",
color="white")+
geom_text(aes(label=percent(porcentaje/100)),
position=position_stack(vjust=0.5),color="white",size=6)+
coord_polar(theta = "y")+
scale_fill_manual(values=c("salmon","steelblue","orange","gray"))+
theme_void()+
labs(title="Gráfico de Pie")
Para hacer el gráfico de dona establecemos x=2 y xlim(0.5,2.5) de esta forma al rotar la barra se forma la dona, esto pues la rotación se hace respecto al origen.
ggplot(df,aes(x=2,y=porcentaje, fill=categorias))+
geom_bar(stat = "identity",
color="white")+
geom_text(aes(label=percent(porcentaje/100)),
position=position_stack(vjust=0.5),color="white",size=6)+
coord_polar(theta = "y")+
scale_fill_manual(values=c("salmon","steelblue","orange","gray"))+
theme_void()+
labs(title="Gráfico de Dona")+
xlim(0.5,2.5)