Раскройте круговую диаграмму / кольцевую диаграмму в R, используя Plotly с количеством и процентом - PullRequest
0 голосов
/ 10 июня 2019

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

library(dplyr)
testfile <- tibble(personID = 1:10,
                   status = c("bad", "good", "bad", "bad", "bad", "bad", "bad", "bad", "bad", "good"),
                   department = c("sales", "sales", "marketing", "sales", "marketing", "management", "management", "sales", "sales", "sales"))

Эта диаграмма окажется в PowerPoint, поэтому она не должна реагировать.Вместо этого мне нужно, чтобы круговая диаграмма показывала, не прокручивая ее,%, который попадает в каждый статус и счет.Кроме того, в центре круговой диаграммы я хочу сказать, что% находится в категории «хорошо».

Это код, который у меня есть до сих пор.У него есть процент, видимый без прокрутки, но не счетчик, и у него нет процента в центре.

library(plotly)
p <- testfile %>%
  group_by(status) %>%
  summarize(count = n()) %>%
  plot_ly(labels = ~status, values = ~count) %>%
  add_pie(hole = 0.6) %>%
  layout(title = "Ratio of Good to Bad",  showlegend = F,
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = TRUE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = TRUE))

Кроме того, если бы вы могли показать, как обработать его по отделам, это было бы очень полезно.Я продолжаю говорить NULL!

Спасибо!

1 Ответ

1 голос
/ 10 июня 2019

Если вы хотите, чтобы текст был в центре вашей круговой / кольцевой диаграммы, вы можете добавить аннотацию .

values <- testfile %>%
  group_by(status) %>%
  summarize(count = n())

good <- values %>% filter(status == 'good')

p <- layout(p, annotations=list(text=paste(good$count / sum(values$count) * 100, "%", sep=""), "showarrow"=F))

, чтобы изменить метку, которая показана накаждый сегмент вашей круговой диаграммы вы можете использовать text.

p <- plot_ly(values, labels = ~status, values = ~count, text = ~count)

enter image description here

Полный код

library(dplyr)
library(plotly)

testfile <- tibble(personID = 1:10,
                   status = c("bad", "good", "bad", "bad", "bad", "bad", "bad", "bad", "bad", "good"),
                   department = c("sales", "sales", "marketing", "sales", "marketing", "management", "management", "sales", "sales", "sales"))

values <- testfile %>%
  group_by(status) %>%
  summarize(count = n())

good <- values %>% filter(status == 'good')

p <- plot_ly(values, labels = ~status, values = ~count, text = ~count) %>%
  add_pie(hole = 0.6) %>%
  layout(title = "Ratio of Good to Bad",  showlegend = F, 
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = TRUE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = TRUE))

p <- layout(p, annotations=list(text=paste(good$count / sum(values$count) * 100, "%", sep=""), "showarrow"=F))
p
...