查看原文
其他

R 语言|大量散点出图速度测试

ecologyR ecologyR 2024-03-28
👉 鼠标修改布局!全球独家 R 语言 SEM 可视化工具
👉 完全用 R 语言实现 Manuel Delgado-Baquerizo 风格的 SEM 图
👉️ 尝试用 R 语言画一个 PNAS 文章的 SEM 图
👉 R 语言 SEM 之复合变量(Composite)的构造案例
👉 R 语言 SEM 之使用 ggplot2 衍生包画 Nature 结构方程模型图
👉 R 语言 SEM 合集

(点击 👉 即可跳转。)

0 引言

有时候需要大量数据快速出图预览(小众用途),于是对比一下 R 语言中不同方式的绘图速度。

  • 需要快速出图就不考虑 ggplot2 了,它渲染比较慢。

n <- 100000
t_0 <- system.time(sample(x = 1:n, size = n, replace = TRUE))

cat(
sprintf(
"运行 %i 次采样,耗时 user %.3f(处理器时间)、system %.3f(操作系统时间)、elapsed %.3f(总时间)秒。",
n,
t_0[1],
t_0[2],
t_0[3]
)
)
运行 100000 次采样,耗时 user 0.006(处理器时间)、system 0.000(操作系统时间)、elapsed 0.006(总时间)秒。

1 用到的包

# Packages
library(txtplot)
library(graphics)

2 虚拟数据

# Generate fake data
set.seed(1)
dat <- data.frame(
xval = c(rnorm(n / 2, 1, 1), rnorm(n / 2, 3, 1)),
yval = c(rnorm(n / 2, 1, 1), rnorm(n / 2, 6, 1))
)

nrow(dat)
[1] 100000

3 使用 graphics 包

  • R 语言自带的绘图包,

  • 发现设置 pch 的尺寸 cex 越小,出图越省时间。

par(family = "mono", cex = 1.5)
t_tinyPch <- system.time(
plot(
dat$yval,
dat$xval,
pch = 16,
cex = 0.1 # 点越小出图越省时
)
)

t_tinyPch user system elapsed
1.260 0.011 1.283
  • 使用 . (半角符号点)代替 pch 其他默认形状,速度更快。

par(family = "mono", cex = 1.5)
t_.Pch <- system.time(
plot(
dat$yval,
dat$xval,
pch = "."
)
)

t_.Pch user system elapsed
0.655 0.006 0.667

4 使用 txtplot 包

  • 很快,但分辨率低,丢失很多细节(可能不如抽取部分数据再 plot 绘图?)。

t_txtPlot <- system.time(
txtplot(
dat$yval,
dat$xval,
pch = ".",
width = 70,
height = 20
)
)
+----------------+----------------------+----------------------+--+
| . . |
| . .... . . . . . . |
6 + . ....................... . +
| .. ............................ |
| .. .... .. ................................... |
4 + .. . .............................................. . +
| ......................................................... |
| . ........................................................ |
2 + .......................................................... +
| ........................................................ . |
| .................................................. .. |
0 + ................................................ . . +
| .................................. .......... . . |
| .............................. . . . |
-2 + . .......................... +
| .. ............. .. |
| . |
+----------------+----------------------+----------------------+--+
0 5 10
t_txtPlot user system elapsed
0.018 0.003 0.022

5 耗时对比

t_txtPlot < t_tinyPch user.self sys.self elapsed user.child sys.child
TRUE TRUE TRUE FALSE FALSE
t_tinyPch < t_.Pch user.self sys.self elapsed user.child sys.child
FALSE FALSE FALSE FALSE FALSE

6 额外的一个例子

  • 须盒图(Box-and-whisker plot)。

mpg_2List <- split(ggplot2::mpg$displ, ggplot2::mpg$drv)
names(mpg_2List)
[1] "4" "f" "r"system.time(
purrr::pmap(
list(mpg_2List, names(mpg_2List)),
function(dat, nm) {
txtboxplot(
dat,
xlab = nm
)
}
)
)
4
2 3 4 5 6
|-----+----------+-----------+----------+-----------+---------|
+------------+-------+
-------------| | |--------------------
+------------+-------+
f
1.5 2 2.5 3 3.5 4
|+----------+-----------+----------+----------+----------+----|
+--------+-------------+
---------| | |----------------------
+--------+-------------+
r
4 5 6 7
|------+----------------+---------------+----------------+----|
+------------+----+
--------------| | |----------------------
+------------+----+
user system elapsed
0.013 0.001 0.014


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存