Меня попросили воссоздать следующий стиль сюжета. (Пожалуйста, проигнорируйте вопрос о том, является ли это хорошим типом визуализации и любезно рассматривает это как добавление красочного элемента в числовую таблицу.)
Большая часть этого довольно проста, но я еще не нашел хорошего способа сделать центр полым. В интересах времени я могу прибегнуть к клоку добавления невидимых фиктивных данных (я опубликую этот подход, если никто другой не сделает этого, но он выглядит менее оптимальным, чем тот, который изменяет тему). Есть ли решение на основе темы или решение без ggplot2 R?
Что мы имитируем
Простой результат ggplot2 (нежелательный заполненный центр)
library(ggplot2)
# make sample dataframe
Category <- c("Electronics", "Appliances", "Books", "Music", "Clothing",
"Cars", "Food/Beverages", "Personal Hygiene",
"Personal Health/OTC", "Hair Care")
Percent <- c(81, 77, 70, 69, 69, 68, 62, 62, 61, 60)
internetImportance<-data.frame(Category,Percent)
# append number to category name
internetImportance$Category <-
paste0(internetImportance$Category," - ",internetImportance$Percent,"%")
# set factor so it will plot in descending order
internetImportance$Category <-
factor(internetImportance$Category,
levels=rev(internetImportance$Category))
# plot
ggplot(internetImportance, aes(x = Category, y = Percent,
fill = Category)) +
geom_bar(width = 0.9, stat="identity") +
coord_polar(theta = "y") +
xlab("") + ylab("") +
ylim(c(0,100)) +
ggtitle("Top Product Categories Influenced by Internet") +
geom_text(data = internetImportance, hjust = 1, size = 3,
aes(x = Category, y = 0, label = Category)) +
theme_minimal() +
theme(legend.position = "none",
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_blank(),
axis.ticks = element_blank())
Как мы можем построить эти данные с полым центром?