Как построить сложенный сортированный ленточный график в R

#r #ggplot2

#r #ggplot2

Вопрос:

Я хочу создать сложенный сортированный ленточный график, как показано ниже.

Участок ленты

 data_orange <- data.frame("Y" = c(0.16,0.10,0.05,0,0.), 
                          "X" = c(2000,2001,2002,2003,2004,2005))

data_light_blue <- data.frame("Y" = c(0.17,0.16,0.14,0.13,0.12), 
                              "X" = c(2000,2001,2002,2003,2004,2005))

data_blue <- data.frame("Y" = c(0.00,0.01,0.04,0.08,0.12), 
                        "X" = c(2000,2001,2002,2003,2004,2005))

data_red <- data.frame("Y" = c(0.36,0.32,0.26,0.19,0.09), 
                       "X" = c(2000,2001,2002,2003,2004,2005))
 

Я сделал этот график с помощью Excel, но хочу сделать в r-studio.

Комментарии:

1. Привет, Каунг, можешь ли ты опубликовать свой фрейм данных (или его подмножество), чтобы сделать его воспроизводимым, возможно, с dput помощью, и показать нам, как выглядит твой график?

2. @mysteRious у меня есть только в Excel, но я хочу скопировать его для r studio. Я также поместил данные выше, каждый цвет имеет уникальный фрейм данных. график, который вы показываете ниже, не похож.

Ответ №1:

Вот один из способов использования geom_ribbon , которым вы можете манипулировать, чтобы получить искомый результат. Для этого требуется небольшое переформатирование данных:

 df2 <- data.frame(x=c(2000,2001,2002,2003,2004,2000,2001,2002,2003,2004,2000,2001,2002,2003,2004,2000,2001,2002,2003,2004), y=c(0.16,0.10,0.05,0,0,0.17,0.16,0.14,0.13,0.12,0,0.01,0.04,0.08,0.12,0.36,0.32,0.26,0.19,0.09), group=c("orange","orange","orange","orange","orange","lightblue","lightblue","lightblue","lightblue","lightblue","blue","blue","blue","blue","blue","red","red","red","red","red"))

> df2
      x    y     group
1  2000 0.16    orange
2  2001 0.10    orange
3  2002 0.05    orange
4  2003 0.00    orange
5  2004 0.00    orange
6  2000 0.17 lightblue
7  2001 0.16 lightblue
8  2002 0.14 lightblue
9  2003 0.13 lightblue
10 2004 0.12 lightblue
11 2000 0.00      blue
12 2001 0.01      blue
13 2002 0.04      blue
14 2003 0.08      blue
15 2004 0.12      blue
16 2000 0.36       red
17 2001 0.32       red
18 2002 0.26       red
19 2003 0.19       red
20 2004 0.09       red
 

Теперь вы можете построить такой график. Измените константу (20), чтобы изменить ширину ленты.

 ggplot(df2, aes(x=x, y=y, group=group, colour=group))   
  geom_ribbon(aes(ymin=v-20*y, ymax=v 20*y, fill=group), alpha=0.2)  
  geom_line()
 

введите описание изображения здесь

[После того, как спрашивающий добавил данные, стало очевидно, что приведенное ниже решение не соответствует диаграмме для типа данных, но оставляю ответ здесь на случай, если кто-то ищет график Санки.]

Хотя есть более красивые варианты (например networkD3 ), самый простой способ создания ленточных графиков — с sankey помощью пакета. Вот пример из https://cran.r-project.org/web/packages/sankey/sankey.pdf :

 edges <- read.table(stringsAsFactors = FALSE, textConnection(
" get_deps get_description
get_deps parse_deps
get_deps %||%
get_deps drop_internal
get_description pkg_from_filename
parse_deps str_trim
cran_file get_pkg_type
cran_file r_minor_version
download_urls split_pkg_names_versions
download_urls cran_file
pkg_download dir_exists
pkg_download download_urls
pkg_download filename_from_url
pkg_download try_download
restore pkg_download
restore drop_missing_deps
restore install_order
restore get_deps
split_pkg_names_versions data_frame
"))
 

Структура данных выглядит следующим образом:

 > edges
                         V1                       V2
1                  get_deps          get_description
2                  get_deps               parse_deps
3                  get_deps                     %||%
4                  get_deps            drop_internal
5           get_description        pkg_from_filename
6                parse_deps                 str_trim
7                 cran_file             get_pkg_type
8                 cran_file          r_minor_version
9             download_urls split_pkg_names_versions
10            download_urls                cran_file
11             pkg_download               dir_exists
12             pkg_download            download_urls
13             pkg_download        filename_from_url
14             pkg_download             try_download
15                  restore             pkg_download
16                  restore        drop_missing_deps
17                  restore            install_order
18                  restore                 get_deps
19 split_pkg_names_versions               data_frame
 

Этот код создает график:

 pkgsnap_sankey <- make_sankey(edges = edges)
sankey(pkgsnap_sankey)
 

введите описание изображения здесь

Комментарии:

1. Я попытаюсь манипулировать параметром, чтобы посмотреть, работает ли он спасибо за начало!

2. на первом графике, что такое «v» в параметрах ymin и ymax?