база R или ggplot - PullRequest
       8

база R или ggplot

1 голос
/ 07 марта 2020

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

Мои данные ниже:

Здесь: dput(p2[1:3, 1:5])

structure(c(25.04240506, 24.95759494, 24.04113924, 25.0164557, 
24.9835443, 24.04905063, 25.00379747, 24.99620253, 24.03955696, 
25.01677215, 24.98322785, 24.01740506, 25.00474684, 24.99525316, 
24.03955696), .Dim = c(3L, 5L), .Dimnames = list(c("Sphacelaria tribuloides(O)", 
"Amphiroa rigida (R)", "Stypocaulon scoparium (O)"), c("A1", 
"A2", "A3", "B1", "B2")))

Текущий выход:

[! [Вот как выглядит мой график ] [1]] [1]

Цель:

[! [Вот так должна выглядеть моя диаграмма воздушных змеев] [2]] [2]

Я есть действительно не уверен, что я делаю не так и или как go о том, как это исправить.

Большое спасибо за вашу помощь и руководство заранее. Я очень ценю это.

1 Ответ

0 голосов
/ 08 марта 2020

Примечание: я изменяю значения вашего примера, чтобы получить больше вариаций, поскольку все ваши значения были между 24 или 25, что объясняет, почему вы получаете почти горизонтальную полосу в своей диаграмме кайта. Я сделал:

df[1:3,1:5] <- sample(5:25, 15, replace = TRUE)

                           A1 A2 A3 B1 B2
Sphacelaria tribuloides(O)  9 18 20  5 17
Amphiroa rigida (R)         6 18 24 18 18
Stypocaulon scoparium (O)  16 18 16 19  8

Чтобы получить диаграмму воздушного змея, вы можете просто использовать функцию kiteChart из диаграммы plotrix.

library(plotrix)
kiteChart(df)

enter image description here

Я не нашел способа повернуть метки y, поскольку кажется, что yaxt = "n" и las = 1 не работают с этой функцией. Итак, я пытаюсь найти способ, используя ggplot2.

Возможный способ - сначала сформировать ваш фрейм данных и преобразовать оси y и x в числовой формат, указав уровень их факторного формата. Вам также необходимо нормализовать столбец «значение»:

library(dplyr)
library(tidyr)
DF <- as.data.frame(df) %>% mutate(species = rownames(df)) %>%
  pivot_longer(-species, names_to = "X_var", values_to = "values") %>%
  mutate(species = factor(species, levels = unique(species))) %>%
  mutate(X_var = factor(X_var, levels = unique(X_var))) %>%
  mutate(NewY = as.numeric(species)*2) %>%
  mutate(normval = values / max(values))  %>%
  mutate(NewX = as.numeric(X_var))  

# A tibble: 15 x 6
   species                    X_var values  NewY normval  NewX
   <fct>                      <fct>  <dbl> <dbl>   <dbl> <dbl>
 1 Sphacelaria tribuloides(O) A1         9     2   0.375     1
 2 Sphacelaria tribuloides(O) A2        18     2   0.75      2
 3 Sphacelaria tribuloides(O) A3        20     2   0.833     3
 4 Sphacelaria tribuloides(O) B1         5     2   0.208     4
 5 Sphacelaria tribuloides(O) B2        17     2   0.708     5
 6 Amphiroa rigida (R)        A1         6     4   0.25      1
 7 Amphiroa rigida (R)        A2        18     4   0.75      2
 8 Amphiroa rigida (R)        A3        24     4   1         3
 9 Amphiroa rigida (R)        B1        18     4   0.75      4
10 Amphiroa rigida (R)        B2        18     4   0.75      5
11 Stypocaulon scoparium (O)  A1        16     6   0.667     1
12 Stypocaulon scoparium (O)  A2        18     6   0.75      2
13 Stypocaulon scoparium (O)  A3        16     6   0.667     3
14 Stypocaulon scoparium (O)  B1        19     6   0.792     4
15 Stypocaulon scoparium (O)  B2         8     6   0.333     5

Теперь вы можете использовать geom_ribbon для получения диаграммы кайта:

library(ggplot2)
ggplot(DF, aes(x = NewX, fill = species))+
  geom_ribbon(aes(ymin = NewY-normval, ymax = NewY+normval))+
  scale_y_continuous(breaks = unique(DF$NewY), labels = levels(DF$species))+
  scale_x_continuous(breaks = unique(DF$NewX), labels = levels(DF$X_var), name = "")

enter image description here Это то, что вы ищете?

...