Построение нескольких круговых диаграмм с меткой на одном графике - PullRequest
0 голосов
/ 08 сентября 2018

Я столкнулся с этим вопросом на днях и попытался воссоздать его для себя. ggplot, facet, piechart: размещение текста в середине фрагментов круговой диаграммы . Мои данные в очень похожем формате, но, к сожалению, принятый ответ не помог, поэтому я и публикую его.

Я хочу создать принятый ответ, но с моими собственными данными, но я сталкиваюсь с проблемой coord_polar does not support free scale. Используя первый ответ: test_pie

Я попробовал это, используя вторую версию ответа, с версией ddplyr, но я также не получаю желаемый результат. Используя второй ответ: test_pie2

Очевидно, что ни один из них не имеет желаемого эффекта. Я бы предпочел создать одну, как с круговыми диаграммами, но в качестве примера показала только четыре: desired_pie. Это я сделал в Excel, но с одной легендой и без фона сетки.

Код

title<-c(1,1,2,2,3,3,4,4,5,5,6,6)
type<-c('A','B','A','B','A','B','A','B','A','B','A','B')
value<-c(0.25,0.75,0.3,0.7,0.4,0.6,0.5,0.5,0.1,0.9,0.15,0.85)

piec<-data.frame(title,type,value)
library(tidyverse)    

p1<-ggplot(data = piec, aes(x = "", y = value, fill = type)) + 
  geom_bar(stat = "identity") +
  geom_text(aes(label = value), position = position_stack(vjust = 0.5)) +
  coord_polar(theta = "y") 
  #facet_grid(title ~ ., scales = "free")
p1


piec <- piec %>% group_by(title) %>% mutate(pos=cumsum(value)-0.5*value)
p2<-ggplot(data = piec) + 
  geom_bar(aes(x = "", y = value, fill = type), stat = "identity") +
  geom_text(aes(x = "", y = pos, label = value)) +
  coord_polar(theta = "y") 
  #facet_grid(Channel ~ ., scales = "free") 
p2

1 Ответ

0 голосов
/ 08 сентября 2018

Вам не нужно указывать разные значения y для geom_text и geom_bar (используйте y = value для них обоих). Далее необходимо указать позицию в geom_text. Наконец, удалите scales из граней.

library(ggplot2)

title<-c(1,1,2,2,3,3,4,4,5,5,6,6)
type<-c('A','B','A','B','A','B','A','B','A','B','A','B')
value<-c(0.25,0.75,0.3,0.7,0.4,0.6,0.5,0.5,0.1,0.9,0.15,0.85)
piec<-data.frame(title,type,value)

ggplot(piec, aes("", value, fill = type)) + 
    geom_bar(stat = "identity", color = "white", size = 1) +
    geom_text(aes(label = paste0(value * 100, "%")), 
              position = position_stack(vjust = 0.5), 
              color = "white", size = 3) +
    coord_polar(theta = "y") +
    facet_wrap(~ title, ncol = 3) +
    scale_fill_manual(values = c("#0048cc", "#cc8400")) +
    theme_void()

enter image description here

...