其他
R 语言|大量散点出图速度测试
👉 鼠标修改布局!全球独家 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