#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?