Ответ 1
Этот график огромен.
Ну, я добрался так далеко, пока не начал немного опускаться. Короче говоря, есть быстрый, не-ggplot2 способ (который почти дает вам то, что вы хотите) и длинный путь ggplot2 (который почти дает вам то, что вы хотите). Быстрый способ (используя df
, приведенный в качестве примера выше):
devtools::install_github("timelyportfolio/sunburstR")
library(sunburstR)
df1 <- df %>%
group_by(Animal) %>%
unite(col=Type, Animal:Name, sep = "-", remove=T)
df1$Type <- gsub(" ", "", df1$Type)
df1$Index <- 1
sunburst(df1)
Это дает вам небольшое интерактивное изображение (не интерактивное, просто снимок):
Путь ggplot2 сложный, и я не понял, как правильно помечать изображение на изображении, но, возможно, кто-то может построить этот код и сделать это.
df1 <- df %>%
mutate(Colour = ifelse(.$Animal == "Goat", "#CD9B1D", ifelse(.$Animal == "Sheep", "#EEC900", "#FFD700"))) %>%
mutate(Index = 1) %>%
group_by(Animal)
Существует три уровня:
First <- ggplot(df1) + geom_bar(aes(x=1, y=Animal, fill=Animal,
label = Animal), position='stack', stat='identity', size=0.15)
+ theme(panel.grid = element_blank(), axis.title=element_blank(),
legend.position="none", axis.ticks=element_blank(),
axis.text = element_blank())
Second <- First
+ geom_bar(data=df1, aes(x=2, y=Animal, fill=Texture, group=Animal),
position='stack', stat='identity', size=0.15, colour = "black")
+ scale_color_brewer(palette = "YlOrBr")
+ scale_fill_brewer(palette = "YlOrBr")
+ theme(axis.title=element_blank(), legend.position="none",
axis.ticks=element_blank(), axis.text = element_blank())
Third <- Second + geom_bar(data=df1, aes(x=3, y=Animal, fill=Name),
position='stack', stat='identity', size=0.15, colour = "black")
+ scale_fill_manual(values = c("#EEC900", "#FFD700", "#CD9B1D",
"#FFD700", "#DAA520", "#EEB422", "#FFC125", "#8B6914", "#EEC591",
"#FFF8DC", "#EEDFCC", "#FFFAF0", "#EEC900", "#FFD700", "#CDAD00",
"#FFF68F", "#FFEC8B", "#FAFAD2", "#FFFFE0", "#CD853F", "#EED8AE",
"#F5DEB3", "#FFFFFF", "#FFFACD", "#D9D9D9", "#EE7600", "#FF7F00",
"#FFB90F", "#FFFFFF"))
+ theme(axis.title=element_blank(), legend.position="none",
axis.ticks=element_blank(), axis.text.y = element_blank(),
panel.background = element_rect(fill = "black"))
Third + coord_polar('y')
Это дает нам:
Хорошо, это так близко, как я. Серьезные шляпы у всех, кто может воссоздать этот граф в R!!