r - 如何在 R 中绘制堆叠排序的带状图
问题描述
我想创建一个堆叠的排序功能区图,如下所示。
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 中做。
解决方案
这是一种使用方法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()
[在提问者添加数据后,很明显下面的解决方案不适合数据类型的图表,但将答案留在这里以防有人正在寻找 sankey 图。]
尽管有更漂亮的选项(例如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)
推荐阅读
- python - 使用 BeautifulSoup 和 Selenium 从动态网页中抓取网址的问题
- clang - LLVM 中调用的这种类型的参数是什么?
- android - ViewModel 阻止的片段返回导航
- architecture - Github Review 功能架构
- python - OpenCV 校准 Charuco 板cornerSubPix
- android - 如何在 react-native-alarm-notification 中设置重复警报,例如(星期一,星期二)
- javascript - React Native:如何将 reactjs 中的 loadscript 转换为 react native
- windows - 如何使用 pnputil 安装与 hwid 关联的驱动程序
- node.js - 构建具有特定节点版本的 docker ubuntu 机器
- azure - Powershell - Azure 存储帐户 - 获取上次身份验证时间/日期