首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >怎样才能让这个ggplot渲染得更快呢?

怎样才能让这个ggplot渲染得更快呢?
EN

Stack Overflow用户
提问于 2021-04-14 04:02:15
回答 1查看 29关注 0票数 1

下面是我正在使用的数据的reprex。geom_segment调用使得渲染变得非常缓慢。有没有其他方法可以更快地达到同样的效果?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(ggridges)

n <- 5000; l <- c(2, 5, 7, 9); sd_27 <- c(5.9, 11, 14, 17)
df <- data.frame(name = c(rep("A", n), rep("B", n), 
                          rep("C", n), rep("D", n)),
                 value = c(rpois(n, l[1]), rpois(n, l[2]),
                           rpois(n, l[3]), rpois(n, l[4])))

ggplot(df, aes(x = value, y = name, fill = name)) + geom_density_ridges(alpha = 0.8) +
  geom_segment(aes(x = l[[1]], y = "A", xend = l[[1]], yend = 2, color = "mean")) +
  geom_segment(aes(x = l[[2]], y = "B", xend = l[[2]], yend = 3, color = "mean")) +
  geom_segment(aes(x = l[[3]], y = "C", xend = l[[3]], yend = 4, color = "mean")) +
  geom_segment(aes(x = l[[4]], y = "D", xend = l[[4]], yend = 5, color = "mean")) +
  geom_segment(aes(x = sd_27[[1]], y = "A", xend = sd_27[[1]], yend = 2, color = "sd_27")) +
  geom_segment(aes(x = sd_27[[2]], y = "B", xend = sd_27[[2]], yend = 3, color = "sd_27")) +
  geom_segment(aes(x = sd_27[[3]], y = "C", xend = sd_27[[3]], yend = 4, color = "sd_27")) +
  geom_segment(aes(x = sd_27[[4]], y = "D", xend = sd_27[[4]], yend = 5, color = "sd_27"))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-14 06:04:15

与通过单独的geom_segment层添加每个段不同,您可以将段的所有数据放在一个数据帧中,然后通过一个geom_segment添加段,根据microbenchmark的说法,这将渲染时间减少到大约五分之一:

geom_segment

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(ggridges)

set.seed(42)

n <- 5000; l <- c(2, 5, 7, 9); sd_27 <- c(5.9, 11, 14, 17)
df <- data.frame(name = c(rep("A", n), rep("B", n), 
                          rep("C", n), rep("D", n)),
                 value = c(rpois(n, l[1]), rpois(n, l[2]),
                           rpois(n, l[3]), rpois(n, l[4])))

dl <- data.frame(x = l, y = LETTERS[1:4], yend = 2:5, color = "mean")
dsd <- data.frame(x = sd_27, y = LETTERS[1:4], yend = 2:5, color = "sd_27")

d <- do.call(rbind, list(dl, dsd))

p1 <- function() {
  ggplot(df, aes(x = value, y = name, fill = name)) + 
    geom_density_ridges(alpha = 0.8) +
    geom_segment(data = d, aes(x = x, y = y, xend = x, yend = yend, color = color), inherit.aes = FALSE)
}

p2 <- function() {
  ggplot(df, aes(x = value, y = name, fill = name)) + geom_density_ridges(alpha = 0.8) +
    geom_segment(aes(x = l[[1]], y = "A", xend = l[[1]], yend = 2, color = "mean")) +
    geom_segment(aes(x = l[[2]], y = "B", xend = l[[2]], yend = 3, color = "mean")) +
    geom_segment(aes(x = l[[3]], y = "C", xend = l[[3]], yend = 4, color = "mean")) +
    geom_segment(aes(x = l[[4]], y = "D", xend = l[[4]], yend = 5, color = "mean")) +
    geom_segment(aes(x = sd_27[[1]], y = "A", xend = sd_27[[1]], yend = 2, color = "sd_27")) +
    geom_segment(aes(x = sd_27[[2]], y = "B", xend = sd_27[[2]], yend = 3, color = "sd_27")) +
    geom_segment(aes(x = sd_27[[3]], y = "C", xend = sd_27[[3]], yend = 4, color = "sd_27")) +
    geom_segment(aes(x = sd_27[[4]], y = "D", xend = sd_27[[4]], yend = 5, color = "sd_27"))
}

# Check plot
p1()
#> Picking joint bandwidth of 0.381

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Compare running time
microbenchmark::microbenchmark(p1()) 
#> Unit: milliseconds
#>  expr      min       lq     mean   median      uq      max neval
#>  p1() 1.859514 1.917135 2.162416 1.936781 2.42122 5.056147   100
microbenchmark::microbenchmark(p2())
#> Unit: milliseconds
#>  expr     min       lq     mean   median       uq      max neval
#>  p2() 9.37298 9.669749 10.20821 9.774624 10.17852 22.42459   100
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67085358

复制
相关文章
怎么抢注域名,怎样才能抢注成功呢
当我们需要上线新网站的时候,往往都需要购买域名,而域名的选择又有新老之分,为了节约网络推广的成本,更多人选择抢注老域名。怎么抢注域名?怎么做才能提高抢注的成功率呢?
用户8739990
2021/07/30
5.2K0
怎么抢注域名,怎样才能抢注成功呢
如何让 JOIN 跑得更快?
JOIN 一直是数据库性能优化的老大难问题,本来挺快的查询,一旦涉及了几个 JOIN,性能就会陡降。而且,参与 JOIN 的表越大越多,性能就越难提上来。 其实,让 JOIN 跑得快的关键是要对 JOIN 分类,分类之后,就能利用各种类型 JOIN 的特征来做性能优化了。 JOIN 分类 有 SQL 开发经验的同学都知道,绝大多数 JOIN 都是等值 JOIN,也就是关联条件为等式的 JOIN。非等值 JOIN 要少见得多,而且多数情况也可以转换成等值 JOIN 来处理,所以我们可以只讨论等值 JOIN。
用户1564362
2022/05/16
7600
如何让 JOIN 跑得更快?
如何让JOIN跑得更快
JOIN 一直是数据库性能优化的老大难问题,本来挺快的查询,一旦涉及了几个 JOIN,性能就会陡降。而且,参与 JOIN 的表越大越多,性能就越难提上来。
红目香薰
2022/11/30
6710
如何让JOIN跑得更快
HTML这个东西,怎么学呢?
HTML这个东西吧,说简单也简单,简单到我都忘了自己是什么时候学会这个东西的。说它复杂呢,其实也挺复杂的,它里面的好多HTML4的标签其实我也记不住,因为不常用它。许多新同学就搞不清楚,这HTML到底怎么学呢,学HTML4还是5呢? 先说下我是怎么学会的哈,再说现在条件下怎么学它。我是在用table改网页的那个阶段,默默的学会网页的,就是不会就查,查点就用,属性在使用中学会的。 现在的同学如果要学HTML,一是看书;二是练习。看书呢不要看太详细的、细节参数太多的书,意义不大。毕竟HTML只不过是一些网页标签
web前端教室
2018/02/06
1.2K0
让你的Python运行更快
讨厌Python的人总是说,他们不想使用它的原因之一是它很 慢。嗯,特定程序(无论使用何种编程语言)是快还是慢,在很大程度上取决于编写该程序的开发人员以及编写优化 而 快速的 程序的技能和能力 。
计算机与AI
2020/12/14
5450
如何让Join跑的更快?
JOIN 一直是数据库性能优化的老大难问题,本来挺快的查询,一旦涉及了几个 JOIN,性能就会陡降。而且,参与 JOIN 的表越大越多,性能就越难提上来。
石臻臻的杂货铺[同名公众号]
2022/04/20
7530
如何让Join跑的更快?
让使用Apache的网站速度更快
Apache 2.0在性能上的改善最吸引人.在支持POSIX线程的Unix系统上,Apache可以通过不同的MPM运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能.相比于Apache 1.3,2.0版本做了大量的优化来提升处理能力和可伸缩性,并且大多数改进在默认状态下即可生效.但是在编译和运行时刻,2.0也有许多可以显著提高性能的选择.
老高的技术博客
2022/12/27
6940
这个题如何用栈解呢?
今天又给大家挑了一道十分经典的题目,也是一道面试常考题目,所以大家记得打卡啊,我们先来看一下题目描述,题目很容易理解,而且用暴力法也很容易实现,因为这个题目出现了我们的栈的模块,大家能不能用栈实现呢?
公众号袁厨的算法小屋
2020/11/25
3350
这个题如何用栈解呢?
让Python代码运行更快的方式
Python因其强大、灵活且易于使用等特性,而赢得了声誉。这些优点使其在各种各样的应用程序、工作流程和领域中得到了广泛应用。但是就语言的设计,也就是它天然的解释能力还有它的运行时的动态性而言,Python总是比C或C ++这样的机器本地语言慢一个数量级。
AI科技大本营
2019/05/28
1.1K0
让骨架屏更快渲染 - 知乎
在之前「为vue项目添加骨架屏」一文中,介绍了骨架屏的概念以及在 Vue 项目中的应用。本文将介绍如何加快浏览器对骨架屏的渲染。
ConardLi
2019/10/06
8650
更换Kali源让你更新更快
该文介绍了如何通过更换Kali Linux的源来加快系统的更新速度。首先介绍了如何找到Kali Linux的源,然后说明了如何修改配置文件并添加新的源。最后,文章给出了一个具体例子,修改软件更新源配置文件,并说明了更新系统的具体步骤。
CN_Simo
2017/12/26
1.9K1
Mson,让JSON序列化更快
本文由秦喆 芝任 天洲 赵鹏四位作者共同完成。 问题 我们经常需要在主线程中读取一些配置文件或者缓存数据,最常用的结构化存储数据的方式就是将对象序列化为JSON字符串保存起来,这种方式特别简单而且可以
美团技术团队
2018/03/13
2K0
Mson,让JSON序列化更快
ggplot2:让图表更顺滑
知道绘图的原理,找到关键路径-绘图就会变的很简单,加上日积月累的练习,就会绘制出亮眼的图形。
herain
2022/04/27
3630
ggplot2:让图表更顺滑
如何让C++字符串更快
std::string firstName = name.substr(0,3);
BrianLee
2023/02/12
7700
让AI 作画更快一点
在上一篇文章《AI 作画初体验》中给大家介绍了一款 AI 作画工具 DD (Disco Diffusion) 及其本地部署方法。初次尝试,感觉 DD 生成的画作效果还不错,就是每次运行的时间比较长,为此花了一些时间研究如何提高 DD 作画的效率。
云水木石
2022/08/30
1.2K0
让AI 作画更快一点
怎么让dedecms生成html页面更快些
  1、把文章模板里的“相关文章”、“热点文章”、“推荐文章”这类的标记删除了,用其它方式,如:shtml、js 引入
ytkah
2022/03/14
2.9K0
如何让MySQL索引更快一点?
在 InnoDB 中,从二级索引回到主键索引查询数据,这个过程称作回表过程,而且这个回表过程是可以被优化的,这个优化就是利用覆盖索引。
江南一点雨
2019/05/13
7210
如何让MySQL索引更快一点?
让 touch 系列事件触发的滚动响应更快
戳蓝字“ IMWeb前端社区 ”关注我们哦! 1写在前面 我们都知道,对于移动端的网页而言,滚动是十分重要的交互。 然而 touch 系列事件触发(滚动后)经常会引发严重的性能问题。为了解决这问题,Chrome (通过允许往addEventListener()中传入{passive: true})让touch系列事件的事件监听器变为“被动”(译者注:其实就是touch之后,不再是执行完事件函数后再滚动),同时搭载pointer 事件相关的API(也支持相关参数)。这些都是很有用的特性,能使处理( touch
用户1097444
2022/06/29
1K0
让 touch 系列事件触发的滚动响应更快
让我们让SpringBoot应用程序更快启动
使用SpringInitializr创建了一个只有Reactive Web的项目。然后,我写了一个WebMVC风格的小控制器。
lyb-geek
2018/12/25
9770
Quiver:让你的多卡GNN训练更快
Quiver是一个开源的GNN框架,其不仅能提升单卡训练的性能,同时能极大的提升训练的多卡扩展性,甚至在有NVLink的机器上实现超线性加速比,而这一切需要的代价仅仅是数十行源码的修改即可(尤其当你是一个PyG用户)!
Houye
2021/11/09
7480
Quiver:让你的多卡GNN训练更快

相似问题

怎样才能使这个等式更快呢?

60

我怎样才能让这个分形在Zelle图形中渲染得更快?

21

怎样才能让这个MySQL查询更快呢?

20

怎样才能使这个更新查询更快呢?

10

怎样才能让这个Cython扩展更快呢?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文