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

Я работаю над созданием кольцевой диаграммы / открытой круговой диаграммы в Plotly. Из-за помощи этого вопроса, Открытая круговая диаграмма / кольцевая диаграмма в R с использованием Plotly с подсчетом и процентом , я смог довольно далеко продвинуться со своим графиком. Однако теперь мне нужна помощь в настройке размера, угла и цвета текста.

Вот набор данных:

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"))

Вот код для построения графика на данный момент. Он имеет количество и процент для каждого статуса, а в центре - процент людей с «хорошим» статусом.

library(plotly)

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

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

Этот код дает эти два графика. Удивительно, но это выглядит первым способом, когда я нажимаю «увеличить» в R Studio, но это выглядит вторым (очень неправильным) способом, когда я нажимаю кнопку экспорта и открываю файл PNG.

Увеличенный сюжет (в основном правильный) enter image description here

Экспортированный сюжет (выглядит совсем не так, как должен ...) enter image description here

Это увеличенный сюжет точно , что я хочу, за исключением трех выпусков:

  1. Я хочу, чтобы центральный текст (20%) был больше. Я пробовал p <- макет (p, аннотации = список (текст = вставить (хороший $ count / sum (значения $ count) * 100, "%", sep = ""), "showarrow" = F, size = 25)) но это ничего не сделало. </p>

  2. Я хочу, чтобы обе метки (2 20% и 8 80%) были белыми, а не только 8 80%. Я думал, что color = I («white») сделает то же самое, но вывод такой же, как и в случае, когда я вообще не указываю цвет.

  3. Я хочу, чтобы надписи были горизонтальными, а не изогнутыми, и чтобы они помещались внутри полос.

Необязательно: почему при экспорте и увеличении он выглядит иначе? Мне нужно, чтобы это выглядело как увеличенная версия. Кроме того, есть ли простой способ заставить его сказать, что n = 2 вместо 2?

Спасибо!

РЕДАКТИРОВАТЬ: Этот код делает метки горизонтальными, но они слишком маленькие. Когда я добавляю size = 15 или любое другое число, он всегда делает шрифт одного размера большим, но больше не горизонтальным. Это также устраняет проблему несовместимости экспорта и масштабирования. Он также фиксирует размер текста по центру. Мне просто нужно, чтобы надписи были белыми, большими по размеру и горизонтальными.

plot <- plot_ly(values, labels = ~status, values = ~count, text = ~count) %>%
  add_pie(hole = 0.6) %>%
  layout(title = "Ratio of Good to Bad",  showlegend = F, position = "topcenter", 
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = TRUE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = TRUE),
         annotations=list(text=paste(good$count / sum(values$count) * 100, "%", sep=""), "showarrow"=F, font=list(size = 40)))
plot

enter image description here

1 Ответ

0 голосов
/ 11 июня 2019

Обновление, я взломал код! Вот код, который работал

library(plotly)
library(dplyr)

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

t <- list(size = 14, color = "white")

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

plot <- plot_ly(values, labels = ~status, values = ~count, text = ~count, textfont = list(color = "white", size = 40)) %>%
  add_pie(hole = 0.6) %>%
  layout(title = "Ratio of Good to Bad",  showlegend = TRUE, 
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = TRUE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = TRUE),
         annotations=list(text=paste(good$count / sum(values$count) * 100, "%", sep=""), "showarrow"=F, font=list(size = 180, color = "black")))
plot

Вот как выглядит сюжет сейчас:

enter image description here

...