r - UpSetR 中的堆积条形图
问题描述
我一直在寻找一种在uptR图中显示堆积条形图的方法。我下载了电影数据集(从这里)并添加了一个只有两个值“M”和“C”的列。下面,有关我如何加载数据并添加“x”列的信息。
编辑:
m <- read.csv(system.file("extdata", "movies.csv", package = "UpSetR"),
header = T, sep = ";")
nrow(m)
[1] 3883
x<-c(rep("M", 3000), rep("C", 883))
m<-cbind(m, x)
unique(m$x)
[1] M C
这是数据框的结构:
str(m)
'data.frame': 3883 obs. of 22 variables:
$ Name : Factor w/ 3883 levels "$1,000,000 Duck (1971)",..: 3577 1858 1483 3718 1175 1559 3010 3548 3363 1420 ...
$ ReleaseDate: int 1995 1995 1995 1995 1995 1995 1995 1995 1995 1995 ...
$ Action : int 0 0 0 0 0 1 0 0 1 1 ...
$ Adventure : int 0 1 0 0 0 0 0 1 0 1 ...
$ Children : int 1 1 0 0 0 0 0 1 0 0 ...
$ Comedy : int 1 0 1 1 1 0 1 0 0 0 ...
$ Crime : int 0 0 0 0 0 1 0 0 0 0 ...
$ Documentary: int 0 0 0 0 0 0 0 0 0 0 ...
$ Drama : int 0 0 0 1 0 0 0 0 0 0 ...
$ Fantasy : int 0 1 0 0 0 0 0 0 0 0 ...
$ Noir : int 0 0 0 0 0 0 0 0 0 0 ...
$ Horror : int 0 0 0 0 0 0 0 0 0 0 ...
$ Musical : int 0 0 0 0 0 0 0 0 0 0 ...
$ Mystery : int 0 0 0 0 0 0 0 0 0 0 ...
$ Romance : int 0 0 1 0 0 0 1 0 0 0 ...
$ SciFi : int 0 0 0 0 0 0 0 0 0 0 ...
$ Thriller : int 0 0 0 0 0 1 0 0 0 1 ...
$ War : int 0 0 0 0 0 0 0 0 0 0 ...
$ Western : int 0 0 0 0 0 0 0 0 0 0 ...
$ AvgRating : num 4.15 3.2 3.02 2.73 3.01 3.88 3.41 3.01 2.66 3.54 ...
$ Watches : int 2077 701 478 170 296 940 458 68 102 888 ...
$ x : Factor w/ 2 levels "M","C": 1 1 1 1 1 1 1 1 1 1 ...
现在我尝试实现堆积条形图,如下所示:
upset(m,
queries = list(
list(query = elements,
params = list("x", "M"), color = "#e69f00", active = T),
list(query = elements,
params = list("x", "C"), color = "#cc79a7", active = T)))
结果如下所示:
如您所见,比例是错误的,因为每个条中应该只有两种颜色(因子)“M”或“C”。正如这里也指出的那样,这个问题似乎不是一个小问题。有人知道如何在 UpsetR 中实现这一点吗?非常感谢
解决方案
这是一种使用堆叠条形图创建不安图的方法,但使用我的 ComplexUpset 而不是 UpSetR:
library(ComplexUpset)
movies = as.data.frame(ggplot2movies::movies)
genres = colnames(movies)[18:24]
# for simplicity of examples, only use the complete data points
movies[movies$mpaa == '', 'mpaa'] = NA
movies = na.omit(movies)
upset(
movies,
genres,
base_annotations=list(
'Intersection size'=intersection_size(
counts=FALSE,
mapping=aes(fill=mpaa)
)
),
width_ratio=0.1
)
请参阅文档中的更多示例。GitHub 上提供了安装说明:krassowski/complex-upset(还有与 UpSetR 和其他软件包的比较)。
推荐阅读
- laravel - Laravel - 试图获取非对象的属性“名称”
- java - Spring SAML:后退浏览器按钮导致验证 SAML 消息时出错
- ios - React Native 0.60.4 从 0.59.9 升级
- python - 在 TfidfVectorizer 中删除法语和英语中的停用词
- c# - ASP.NET Core Identity,如何覆盖 IdentityRole Name 唯一索引?我想存储关于租户的重复名称
- web-scraping - 基于页面内容的操作
- javascript - 为什么我的选择器无法读取“状态”?状态未定义
- c# - 将列表项从任务添加到组合框
- performance - Apache Kafka 的 TPL 性能
- loops - 如何提高循环中的运行时间?