красивые Круговые диаграммы с R

предположим, у меня есть эти простые данные:

 mydata <- data.frame(group=c("A", "B", "0", "AB"), FR=c(20, 32, 32, 16))

Если я хочу создать круговую диаграмму из этого фрейма данных, я могу сделать:

 with(mydata,pie(FR, labels=paste0(as.character(group), " ", FR, "%"), radius=1))

basic pie

Это довольно просто, но приемлемо.

как я могу получить что-то подобное с ggplot2 или решеткой?

после многих проб и ошибок у меня есть

ggplot(mydata, aes(x = factor(1), y=FR,fill=factor(group)) ) + geom_bar(width = 1,stat="identity")+coord_polar(theta = "y") 

ggplot

это гораздо сложнее и уродливее. Разве не так должно быть? легко? книги ggplot дают только некоторые примеры и не рекомендуют использовать круговые диаграммы.

решетка еще хуже, вам нужно много много линий, чтобы получить это пугает.

может кто-нибудь помочь мне получить хорошую и простую круговую диаграмму, пожалуйста? Например что-то вроде...

example1

example2

нет ли пакета R, способного сделать это легко, без 20 строк кода?

3 ответов


вы можете попробовать с


зачем площадью круговая диаграмма ?

devtools::install_github("hrbrmstr/waffle")
library(waffle)

mydata <- c(`A`=20, `B`=32, `0`=32, `AB`=16)
waffle(mydata, title = "Yummy waffle pie!")

enter image description here


если у вас есть несколько измерений информации, другой вариант может быть sunburstR. Используя browsers данные из @rawr в в должности вы могли бы сделать:

library(sunburstR)
library(dplyr)
library(tidyr)
browsers %>%
  unite(bv, browser, version, sep = "-") %>%
  select(bv, share) %>%
  sunburst(., count = TRUE)

enter image description here

можно использовать treemap (для интерактивной версии, попробовать @timelyportfolio это d3treeR пакета)

library(treemap)
tm <- treemap(
  browsers,
  index=c("browser", "version"),
  vSize="share",
  vColor="share",
  type="value"
)

enter image description here

вы также можете использовать диаграмму sankey (из networkD3 пакета)

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)

enter image description here


некоторые полезные советы здесь:

источник: аналитика темной лошади: спасение пирога

(srsly tho, что случилось с гистограммой?)

примечание: Я понятия не имею, что делает Dark Horse Analytics. Это просто мое демонстрационное изображение против пирога.