Disons que j'ai ces données simples:
mydata <- data.frame(group=c("A", "B", "0", "AB"), FR=c(20, 32, 32, 16))
Si je veux créer un graphique à secteurs à partir de cette base de données, je peux le faire:
with(mydata,pie(FR, labels=paste0(as.character(group), " ", FR, "%"), radius=1))
C'est assez simple mais acceptable.
Comment puis-je obtenir quelque chose de similaire avec ggplot2 ou treillis?
Après de nombreux essais et erreurs, j'ai
ggplot(mydata, aes(x = factor(1), y=FR,fill=factor(group)) ) + geom_bar(width = 1,stat="identity")+coord_polar(theta = "y")
C'est beaucoup plus complexe et laid. N'est-ce pas censé être facile? Les livres ggplot ne donnent que quelques exemples et découragent l'utilisation des camemberts.
Le treillis est encore pire, vous avez besoin de beaucoup de lignes pour faire peur.
Quelqu'un pourrait-il m'aider à obtenir un graphique circulaire agréable et simple, s'il vous plaît? Par exemple quelque chose comme ...
N'y a-t-il pas un package R capable de le faire facilement, sans 20 lignes de code?
Quelques conseils pratiques ici:
Source: Dark Horse Analytics: Salvaging the Pie
(slyly tho, quel est le problème avec un graphique à barres?)
REMARQUE: je n'ai aucune idée de ce que fait Dark Horse Analytics. Ceci est juste mon image de démonstration anti-tarte.
Pourquoi pas un carré camembert?
devtools::install_github("hrbrmstr/waffle")
library(waffle)
mydata <- c(`A`=20, `B`=32, `0`=32, `AB`=16)
waffle(mydata, title = "Yummy waffle pie!")
Si vous avez plusieurs dimensions d'informations, une autre option pourrait être sunburstR . En utilisant les données browsers
de @rawr post , vous pourriez faire:
library(sunburstR)
library(dplyr)
library(tidyr)
browsers %>%
unite(bv, browser, version, sep = "-") %>%
select(bv, share) %>%
sunburst(., count = TRUE)
Vous pouvez utiliser treemap
(pour une version interactive, essayez le d3treeR
De --- l'opportportfolio package )
library(treemap)
tm <- treemap(
browsers,
index=c("browser", "version"),
vSize="share",
vColor="share",
type="value"
)
Vous pouvez également utiliser un diagramme sankey (à partir du networkD3
package )
library(networkD3)
df <- browsers %>%
mutate_each(funs(as.character), browser, version) %>%
mutate(bn = group_indices_(., .dots = "browser"),
cn = max(bn) + row_number())
links <- select(df, bn, cn, share)
nodes <- data.frame(name = c("", sort(unique(df$browser)), df$version))
sankeyNetwork(Links = links, Nodes = nodes, Source = "bn",
Target = "cn", Value = "share", NodeID = "name",
fontSize = 12, nodeWidth = 30)