UpSetR 高级参数使用教程

在《UpSetR:多数据集绘图可视化处理利器》中我们介绍了 UpSetR 的一些概念和绘图基础参数使用,今天我们来学习一下 UpSetR 的 queriesattribute.plots 这两个高级参数的使用。



queries 参数


queries 参数里面的每一个 list 都是由四个部分组成:query, param, color, active

  • query:查询函数,可以用系统自带的,也可以自己写。

  • param:参数,查询函数(query)作用于哪些数据集,是一个 list。

  • color:每个 query 在绘图中的颜色,没设置的话将调用 UpSetR 默认的调色板。

  • active:决定 query 将如何表示在图上。TRUE,intersection size 条形图将会被 query 中的条形图覆盖;FALSE,intersection size 条形图将会被加上一个三角形(a jitter point),这个三角形的位置是波动性的。


示例1:内置的交集查询


本示例展示了如何通过内置的交集查询(intersection query)intersects 去查找并展示特定的交集元素(elements in specific intersections)。本示例中 active query 的颜色来源于 UpSetR 中默认的调色板。

upset(movies, queries = list(list(query = intersects, params = list("Drama", "Comedy", "Action"), color = "orange", active = T), 
    list(query = intersects, params = list("Drama"), color = "red", active = F),
    list(query = intersects, params = list("Action", "Drama"), active = T)))

【左右滑动查看完整信息】

4ab32053-b6cb-4c25-8b27-23eedfba172b.png

  • Drama, Comedy, Action 的交集(10)已经变成了橘色(color="orange"),上方的 Intersection Size 条形图已经被橘色的条形图覆盖(active=T);

  • Action, Drama 的交集(68)也变成了默认的蓝色。

  • Drama 的圆点变成了红色(color="red"),上方的 Intersection Size 条形图顶部被一个红色的三角形覆盖(active=F)。


示例2:内置的元素查询


本示例展示了如何通过内置的元素查询(element query)函数 elements 可视化展示特定的元素在交集中是如何分布的。

upset(movies, queries = list(list(query = elements, params = list("AvgRating", 3.5, 4.1), color = "blue", active = T), 
    list(query = elements, params = list("ReleaseDate", 1980, 1990, 2000), color = "red", active = F)))

【左右滑动查看完整信息】

670f524b-3d8d-40fb-b8a9-019c61c9cdb3.png

  • 蓝色的条形图表示,默认的 6 个数据集中符合 AvgRating == 3.5 或者 AvgRating == 4.1 在各个集合中的个数分布。

  • 红色三角形表示,6 个数据集中符合 ReleaseDate==1980, 1990, 2000 在各个集合中的分布,它们的位置存在波动性(active = F)。


示例3:使用表达参数进行交集和元素子集查询


本示例展示如何通过使用 expression 参数获取交集和元素查询的子集(subset the results of element and intersection queries)。

upset(movies, queries = list(list(query = intersects, params = list("Action", "Drama"), active = T), 
    list(query = elements, params = list("ReleaseDate", 1980, 1990, 2000), color = "red", active = F)),
    expression = "AvgRating > 3 & Watches > 100")

【左右滑动查看完整信息】

8e7e1047-8a9c-4140-af5f-665a376754c0.png


示例4:自定义查询


# Creating a custom query to operate on the rows of the data.
Myfunc <- function(row, release, rating) {
    data <- (row["ReleaseDate"] %in% release) & (row["AvgRating"] > rating)
}

# Applying the created query to the queries parameter.
upset(movies, queries = list(list(query = Myfunc, params = list(c(1970, 1980, 1990, 1999, 2000), 2.5), color = "blue", active = T)))

【左右滑动查看完整信息】

aa3b73a5-1da3-401f-b9e6-d95ccc4b8917.png


示例5:使用查询图例


UpSetR 可以通过使用 query.legend 添加 queries 的图例。query.legend 的位置可以在头部(top)或者底部(bottom);我们也可以使用 query.name 参数在 queries 中给每一个 query 自定义指定的名称。

upset(movies, query.legend = "top", queries = list(list(query = intersects, 
    params = list("Drama", "Comedy", "Action"), color = "orange", active = T,
    query.name = "Funny action"), list(query = intersects, params = list("Drama"),
    color = "red", active = F), list(query = intersects, params = list("Action",
    "Drama"), active = T, query.name = "Emotional action")))

【左右滑动查看完整信息】

a7ca046f-4299-44b5-b1a7-b5759e2f9ae5.png


示例6:queries 绘图总结


综合示例1——示例5,绘制图形如下:

upset(movies, query.legend = "bottom", queries = list(list(query = Myfunc, params = list(c(1970, 
    1980, 1990, 1999, 2000), 2.5), color = "orange", active = T), list(query = intersects,
    params = list("Action", "Drama"), active = F), list(query = elements, params = list("ReleaseDate",
    1980, 1990, 2000), color = "red", active = F, query.name = "Decades")),
    expression = "AvgRating > 3 & Watches > 100")

【左右滑动查看完整信息】

1e341f2d-738f-45ef-9273-9f16a82fea9b.png



attribute.plots 参数


attribute.plots 主要是用于添加属性图,内置有柱形图、散点图、热图等。该参数被分解成 3 部分:gridrows, plots, 以及 ncols

  • gridrows:用于指定扩展绘图窗口以增加属性图的空间。UpSetR 默认是在 100 x 100 的网格上进行绘图的,因此如果我们将网格(gridrows)设置为 50,则新的网格布局将变成 150 x 100,为属性图留出 1/3 的网格空间。

  • plots:接收一个参数列表,这些参数包括 plot, x, y(如果适用的话),以及 queries。

  • plot:一个返回 ggplot 的函数。

  • x:ggplot 图形中的 x 轴标题(string)。

  • y:ggplot 图形中的 y 轴标题(string)。

  • queries:指示是否将当前的 queries 与绘图重叠。如果 queries 为 TRUE,属性图(attribute plot)将会被来源于查询(queries)的数据覆盖;否则,查询结果将不会绘制在属性图上。

  • ncols:指示如何在 gridrows 空间中绘制图形。如果输入了 2 个属性图(attribute plots)且 ncols=1,属性图将会纵向一个个排列;如果输入了 2 个属性图(attribute plots)且 ncols=2,属性图将并排显示。


示例1:直方图


本示例展示了如何在 UpSetR 中添加一个内置直方属性图。如果 main.bar.color 未指定为黑色,则包含在黑色 intersection size 柱状条中的元素将在属性图中表示为灰色。

upset(movies, main.bar.color = "black", queries = list(list(query = intersects, 
    params = list("Drama"), active = T)), attribute.plots = list(gridrows = 50,
    plots = list(list(plot = histogram, x = "ReleaseDate", queries = F), list(plot = histogram,
        x = "AvgRating", queries = T)), ncols = 2))

【左右滑动查看完整信息】

2d7c2d75-85c7-4983-bcff-b53940c9d4f3.png


示例2:散点图


本示例展示了如何在 UpSetR 中添加一个内置散点属性图。需要注意的是,在本示例中使用了 query.legend

upset(movies, main.bar.color = "black", queries = list(list(query = intersects, params = list("Drama"), color = "red", active = F),
    list(query = intersects, params = list("Action", "Drama"), active = T),
    list(query = intersects, params = list("Drama", "Comedy", "Action"), color = "orange", active = T)),
    attribute.plots = list(gridrows = 45, plots = list(list(plot = scatter_plot, x = "ReleaseDate", y = "AvgRating", queries = T),
        list(plot = scatter_plot, x = "AvgRating", y = "Watches", queries = F)), ncols = 2),
    query.legend = "bottom")

【左右滑动查看完整信息】

250e3229-0319-49eb-9420-9e18941f3fb7.png


示例3:自定义属性图

myplot <- function(mydata, x, y) {
    plot <- (ggplot(data = mydata, aes_string(x = x, y = y, colour = "color")) +
        geom_point() + scale_color_identity() + theme(plot.margin = unit(c(0,
        0, 0, 0), "cm")))
}

another.plot <- function(data, x, y) {
    data$decades <- round_any(as.integer(unlist(data[y])), 10, ceiling)
    data <- data[which(data$decades >= 1970), ]
    myplot <- (ggplot(data, aes_string(x = x)) + geom_density(aes(fill = factor(decades)),
        alpha = 0.4) + theme(plot.margin = unit(c(0, 0, 0, 0), "cm"), legend.key.size = unit(0.4,
        "cm")))
}

【左右滑动查看完整信息】


使用上面定义的 myplot 应用于 UpSetR 绘图。

upset(movies, main.bar.color = "black", queries = list(list(query = intersects, 
    params = list("Drama"), color = "red", active = F), list(query = intersects,
    params = list("Action", "Drama"), active = T), list(query = intersects,
    params = list("Drama", "Comedy", "Action"), color = "orange", active = T)),
    attribute.plots = list(gridrows = 45, plots = list(list(plot = myplot, x = "ReleaseDate",
        y = "AvgRating", queries = T), list(plot = another.plot, x = "AvgRating",
        y = "ReleaseDate", queries = F)), ncols = 2))

【左右滑动查看完整信息】

995521f1-8b54-4aeb-aee7-ac556faeae49.png


示例4:属性图绘图总结


综合示例 1 的内置直方图、示例 2 的内置散点图,以及示例 3 的自定义属性图,绘图如下:

upset(movies, main.bar.color = "black", mb.ratio = c(0.5, 0.5), queries = list(list(query = intersects, 
    params = list("Drama"), color = "red", active = F), list(query = intersects,
    params = list("Action", "Drama"), active = T), list(query = intersects,
    params = list("Drama", "Comedy", "Action"), color = "orange", active = T)),
    attribute.plots = list(gridrows = 50, plots = list(list(plot = histogram,
        x = "ReleaseDate", queries = F), list(plot = scatter_plot, x = "ReleaseDate",
        y = "AvgRating", queries = T), list(plot = myplot, x = "AvgRating",
        y = "Watches", queries = F)), ncols = 3))

【左右滑动查看完整信息】

dba8e01e-5dfe-41f4-b8d6-93904f50db09.png


示例5:箱线图


箱线图(Box plots)可以展示所有交集的点属性分布,交集箱线图可以一次性最多展示 2 个箱线图的总体情况。boxplot.summary 参数接收包含 1 个或者 2 个属性名称的向量数据(vector)。

upset(movies, boxplot.summary = c("AvgRating", "ReleaseDate"))

【左右滑动查看完整信息】

03c8f56b-3f37-43c5-b326-1f3faec06f2d.png


关于 UpSetR 包的使用就介绍到这里,该包的其他一些用法,如 Incorporating Set Metadata 可以参考官方文档,或者查看 UpSetR 在 GitHub 的源码。


本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值