R 中具有 3 个级别的饼图(或圆环图)

问题描述 投票:0回答:1

我一直在尝试创建一个具有三个层次结构级别的饼图,遵循以下中提供的代码:

  1. 使用 ggplot2 的多个依赖级旭日图/圆环图
  2. 分层/多级饼图
  3. https://r-graph-gallery.com/pie-plot.html

不幸的是,我无法成功复制它。 这是我的数据集的概述:

我的数据集看起来像:

str(df2)

tibble [2,709 × 4] (S3: tbl_df/tbl/data.frame)
 $ Taxon : chr [1:2709] "Acleris undulana" "Anchusa aegyptiaca" "Aonidiella taxus" "Aphanarthrum mairei" ...
 $ Phylum: chr [1:2709] "Arthropoda" "Tracheophyta" "Arthropoda" "Arthropoda" ...
 $ Class : chr [1:2709] "Insecta" "Magnoliopsida" "Insecta" "Insecta" ...
 $ Family: chr [1:2709] "Tortricidae" "Boraginaceae" "Diaspididae" "Curculionidae" ... 

因此,我的图表的级别应该是门 > 班级 > 家庭

虽然可以在https://drive.google.com/drive/folders/19NVphifzr-y9Q_8gDy41sMIAFHaCDXJ4?usp=drive_link访问完整的数据集,但我尝试了多个R代码,但由于它们都不起作用,所以我不这样做认为在这一点上包括他们会有所帮助。

样本数据集:

> dput(df[sample(nrow(df), 100),])

structure(list(Taxon = c("Chasmanthe aethiopica", "Josephiella microcarpae", 
"Rodolia cardinalis", "Tanacetum balsamita", "Acartia tonsa", 
"Paspalum dilatatum", "Fimbristylis bisumbellata", "Coronilla valentina glauca", 
"Passiflora caerulea", "Stenotaphrum secundatum", "Erythrura prasina", 
"Triops longicaudatus", "Lilium candidum", "Amaranthus powellii", 
"Rapistrum rugosum", "Medicago radiata", "Casuarina cunninghamiana", 
"Lathyrus oleraceus", "Chamaeleo chamaeleon", "Mustela putorius", 
"Glycyrrhiza glabra", "Punica granatum", "Cenchrus longisetus", 
"Myoporum tenuifolium", "Kalanchoe prolifera", "Cuscuta epilinum", 
"Valerianella dentata", "Trachycarpus fortunei", "Zaprionus indianus", 
"Cenchrus americanus", "Lepidium spinosum", "Sander lucioperca", 
"Anethum graveolens", "Mercurialis annua", "Podarcis siculus", 
"Digitaria violascens", "Tockus deckeni", "Crepis bellidifolia", 
"Aratinga pertinax", "Medicago lupulina", "Ligustrum japonicum", 
"Erythrostemon gilliesii", "Rhinella marina", "Tradescantia cerinthoides", 
"Hasarius adansoni", "Opuntia robusta Pfeiff.", "Prosopis juliflora", 
"Passer montanus", "Cyperus alternifolius flabelliformis", "Predaea huismanii", 
"Hydrocotyle bonariensis", "Lagurus ovatus", "Arrhenatherum elatius", 
"Agapornis personatus", "Quadrastichodella nova", "Mentha villosa", 
"Eliomys quercinus", "Ploceus intermedius", "Arabidopsis thaliana", 
"Ipomoea sagittata", "Bromus catharticus", "Wisteria sinensis", 
"Gymnophycus hapsiphorus", "Carcinops pumilio", "Ulmus minor", 
"Ploceus nigerrimus", "Crithagra mozambica", "Morus alba", "Lonicera etrusca", 
"Cisurgus wollastoni", "Rhynchosia caribaea", "Oxalis stricta", 
"Symphyotrichum lanceolatum", "Nandayus nenday", "Melampyrum arvense", 
"Phoenix canariensis hort. ex Chabaud", "Amphilophium buccinatorium", 
"Bidens pilosa", "Columba livia", "Antithamnionella spirographidis", 
"Angelica archangelica", "Asparagopsis armata", "Ploceus vitellinus", 
"Datura metel", "Clematis vitalba", "Amphibalanus improvisus", 
"Aburria cumanensis", "Euphorbia milii", "Passer domesticus", 
"Oxalis debilis", "Sansevieria trifasciata", "Cosmopolites sordidus", 
"Hordeum distichon", "Artemisia verlotiorum", "Symphytum asperum", 
"Platycorypha nigrivirga", "Orobanche minor", "Hemidactylus turcicus", 
"Campsis radicans", "Ulex europaeus"), Phylum = c("Tracheophyta", 
"Arthropoda", "Arthropoda", "Tracheophyta", "Arthropoda", "Tracheophyta", 
"Tracheophyta", "Tracheophyta", "Tracheophyta", "Tracheophyta", 
"Chordata", "Arthropoda", "Tracheophyta", "Tracheophyta", "Tracheophyta", 
"Tracheophyta", "Tracheophyta", "Tracheophyta", "Chordata", "Chordata", 
"Tracheophyta", "Tracheophyta", "Tracheophyta", "Tracheophyta", 
"Tracheophyta", "Tracheophyta", "Tracheophyta", "Tracheophyta", 
"Arthropoda", "Tracheophyta", "Tracheophyta", "Chordata", "Tracheophyta", 
"Tracheophyta", "Chordata", "Tracheophyta", "Chordata", "Tracheophyta", 
"Chordata", "Tracheophyta", "Tracheophyta", "Tracheophyta", "Chordata", 
"Tracheophyta", "Arthropoda", "Tracheophyta", "Tracheophyta", 
"Chordata", "Tracheophyta", "Rhodophyta", "Tracheophyta", "Tracheophyta", 
"Tracheophyta", "Chordata", "Arthropoda", "Tracheophyta", "Chordata", 
"Chordata", "Tracheophyta", "Tracheophyta", "Tracheophyta", "Tracheophyta", 
"Tracheophyta", "Arthropoda", "Tracheophyta", "Chordata", "Chordata", 
"Tracheophyta", "Tracheophyta", "Arthropoda", "Tracheophyta", 
"Tracheophyta", "Tracheophyta", "Chordata", "Tracheophyta", "Tracheophyta", 
"Tracheophyta", "Tracheophyta", "Chordata", "Rhodophyta", "Tracheophyta", 
"Rhodophyta", "Chordata", "Tracheophyta", "Tracheophyta", "Arthropoda", 
"Chordata", "Tracheophyta", "Chordata", "Tracheophyta", "Tracheophyta", 
"Arthropoda", "Tracheophyta", "Tracheophyta", "Tracheophyta", 
"Arthropoda", "Tracheophyta", "Chordata", "Tracheophyta", "Tracheophyta"
), Class = c("Liliopsida", "Insecta", "Insecta", "Magnoliopsida", 
"Hexanauplia", "Liliopsida", "Liliopsida", "Magnoliopsida", "Magnoliopsida", 
"Liliopsida", "Aves", "Branchiopoda", "Liliopsida", "Magnoliopsida", 
"Magnoliopsida", "Magnoliopsida", "Magnoliopsida", "Magnoliopsida", 
"Reptilia", "Mammalia", "Magnoliopsida", "Magnoliopsida", "Liliopsida", 
"Magnoliopsida", "Magnoliopsida", "Magnoliopsida", "Magnoliopsida", 
"Liliopsida", "Insecta", "Liliopsida", "Magnoliopsida", "Actinopterygii", 
"Magnoliopsida", "Magnoliopsida", "Reptilia", "Liliopsida", "Aves", 
"Magnoliopsida", "Aves", "Magnoliopsida", "Magnoliopsida", "Magnoliopsida", 
"Amphibia", "Liliopsida", "Arachnida", "Magnoliopsida", "Magnoliopsida", 
"Aves", "Liliopsida", "Florideophyceae", "Magnoliopsida", "Liliopsida", 
"Liliopsida", "Aves", "Insecta", "Magnoliopsida", "Mammalia", 
"Aves", "Magnoliopsida", "Magnoliopsida", "Liliopsida", "Magnoliopsida", 
"Florideophyceae", "Insecta", "Magnoliopsida", "Aves", "Aves", 
"Magnoliopsida", "Magnoliopsida", "Insecta", "Magnoliopsida", 
"Magnoliopsida", "Magnoliopsida", "Aves", "Magnoliopsida", "Liliopsida", 
"Magnoliopsida", "Magnoliopsida", "Aves", "Florideophyceae", 
"Magnoliopsida", "Florideophyceae", "Aves", "Magnoliopsida", 
"Magnoliopsida", "Maxillopoda", "Aves", "Magnoliopsida", "Aves", 
"Magnoliopsida", "Liliopsida", "Insecta", "Liliopsida", "Magnoliopsida", 
"Magnoliopsida", "Insecta", "Magnoliopsida", "Reptilia", "Magnoliopsida", 
"Magnoliopsida"), Family = c("Iridaceae", "Agaonidae", "Coccinellidae", 
"Asteraceae", "Acartiidae", "Poaceae", "Cyperaceae", "Fabaceae", 
"Passifloraceae", "Poaceae", "Estrildidae", "Triopsidae", "Liliaceae", 
"Amaranthaceae", "Brassicaceae", "Fabaceae", "Casuarinaceae", 
"Fabaceae", "Chamaeleonidae", "Mustelidae", "Fabaceae", "Lythraceae", 
"Poaceae", "Scrophulariaceae", "Crassulaceae", "Convolvulaceae", 
"Caprifoliaceae", "Arecaceae", "Drosophilidae", "Poaceae", "Brassicaceae", 
"Percidae", "Apiaceae", "Euphorbiaceae", "Lacertidae", "Poaceae", 
"Bucerotidae", "Asteraceae", "Psittacidae", "Fabaceae", "Oleaceae", 
"Fabaceae", "Bufonidae", "Commelinaceae", "Salticidae", "Cactaceae", 
"Fabaceae", "Passeridae", "Cyperaceae", "Nemastomataceae", "Apiaceae", 
"Poaceae", "Poaceae", "Psittacidae", "Eulophidae", "Lamiaceae", 
"Gliridae", "Ploceidae", "Brassicaceae", "Convolvulaceae", "Poaceae", 
"Fabaceae", "Ceramiaceae", "Histeridae", "Ulmaceae", "Ploceidae", 
"Fringillidae", "Moraceae", "Caprifoliaceae", "Curculionidae", 
"Fabaceae", "Oxalidaceae", "Asteraceae", "Psittacidae", "Orobanchaceae", 
"Arecaceae", "Bignoniaceae", "Asteraceae", "Columbidae", "Ceramiaceae", 
"Apiaceae", "Bonnemaisoniaceae", "Ploceidae", "Solanaceae", "Ranunculaceae", 
"Balanidae", "Cracidae", "Euphorbiaceae", "Passeridae", "Oxalidaceae", 
"Asparagaceae", "Dryophthoridae", "Poaceae", "Asteraceae", "Boraginaceae", 
"Psyllidae", "Orobanchaceae", "Gekkonidae", "Bignoniaceae", "Fabaceae"
)), row.names = c(824L, 173L, 70L, 1426L, 299L, 777L, 803L, 1955L, 
912L, 728L, 1834L, 339L, 830L, 2111L, 2063L, 1163L, 2340L, 1954L, 
459L, 1805L, 1167L, 2194L, 1899L, 2383L, 2440L, 1035L, 952L, 
822L, 216L, 2243L, 2073L, 377L, 1261L, 1305L, 2610L, 1888L, 486L, 
2410L, 494L, 1157L, 1533L, 2502L, 1797L, 844L, 313L, 2510L, 1992L, 
1830L, 809L, 35L, 1260L, 1895L, 756L, 520L, 200L, 2477L, 437L, 
2274L, 1299L, 1055L, 744L, 2506L, 19L, 77L, 2013L, 625L, 2279L, 
2017L, 1938L, 8L, 1961L, 2657L, 2611L, 549L, 2378L, 2406L, 2462L, 
2153L, 649L, 696L, 2044L, 1858L, 621L, 1059L, 1252L, 2324L, 560L, 
1323L, 1828L, 977L, 2701L, 95L, 2534L, 1434L, 1008L, 266L, 1542L, 
1814L, 1537L, 1129L), class = "data.frame")
r ggplot2 charts pie-chart donut-chart
1个回答
0
投票

我认为类群的数量太大了,无法做任何有意义的事情,但是一个非常简单的旭日可以构建如下:

library(readxl)
library(dplyr)
library(forcats)
library(ggplot2)

df <- read_excel("data/df2.xlsx")

df %>% 
  select(Phylum) %>%
  summarise(.by = c(Phylum), n = n()) %>% 
  arrange(Phylum) %>%
  mutate(xmin = cumsum(lag(n, default = 0)),
         xmax = cumsum(n) ) %>% 
  mutate(Phylum = fct_inorder(Phylum)) -> df_phylum

df %>% 
  select(Phylum, Class) %>%
  summarise(.by = c(Phylum, Class), n = n()) %>% 
  arrange(Phylum, Class) %>%
  mutate(xmin = cumsum(lag(n, default = 0)),
         xmax = cumsum(n) ) %>% 
  mutate(Phylum = fct_inorder(Phylum),
         Class = fct_inorder(Class)) -> df_class

df %>% 
  select(Phylum, Class, Family) %>%
  summarise(.by = c(Phylum, Class, Family), n = n()) %>% 
  arrange(Phylum, Class, Family) %>%
  mutate(xmin = cumsum(lag(n, default = 0)),
         xmax = cumsum(n) ) %>% 
  mutate(Phylum = fct_inorder(Phylum),
         Class = fct_inorder(Class),
         Family = fct_inorder(Family)) -> df_family

ggplot()+
  geom_rect(data = df_phylum,
            aes(xmin = xmin, xmax = xmax, ymin = 0, ymax = 1, 
                fill = Phylum), 
            color = "white", linewidth = .1, show.legend = FALSE) +
  scale_fill_viridis_d(option = "C") +
  new_scale_fill() +
  geom_rect(data = df_class,
          aes(xmin = xmin, xmax = xmax, ymin = 1, ymax = 2, 
              fill = Class), 
          color = "white", linewidth = .1, show.legend = FALSE) +
  scale_fill_viridis_d(option = "C") +
  new_scale_fill() +
  geom_rect(data = df_family,
          aes(xmin = xmin, xmax = xmax, ymin = 2, ymax = 3, 
              fill = Family), 
          color = "white", linewidth = .1, show.legend = FALSE) +
  scale_fill_viridis_d(option = "C") +
  coord_radial(start = 0, end = 2*pi, expand = FALSE)
© www.soinside.com 2019 - 2024. All rights reserved.