geom_vline,传奇和表演
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了geom_vline,传奇和表演相关的知识,希望对你有一定的参考价值。
我想在我的情节上绘制几条垂直线,并为每个相应的vline创建一个图例。
阅读this post后,这是我实施的内容:
set.seed(99)
df.size <- 1e6
my.df <- data.frame(dist = rnorm(df.size, mean = 0, sd = 2))
library(ggplot2)
ggplot(my.df, aes(x=dist)) + geom_histogram(binwidth = 0.5)
vline1.threshold <- mean(my.df$dist)
vline2.threshold <- mean(my.df$dist) + 3*sd(my.df$dist)
现在为情节:
g <- ggplot(my.df, aes(x = dist)) +
geom_histogram(binwidth = 0.5) +
geom_vline(aes(color = "vline1", xintercept = vline1.threshold)) +
geom_vline(aes(color = "vline2", xintercept = vline2.threshold)) +
scale_color_manual("Threshold", values = c(vline1 = "red", vline2 = "blue"), labels = c("Mean", "Mean + 3*SD"))
system.time(print(g))
这非常有效:
但它很慢:
utilisateur système écoulé
51.667 1.883 53.652
(抱歉,我的系统是法语)
但是,当我这样做时(在xes之外使用xintercept):
g <- ggplot(my.df, aes(x = dist)) +
geom_histogram(binwidth = 0.5) +
geom_vline(aes(color = "vline1"), xintercept = vline1.threshold, color = "red") +
geom_vline(aes(color = "vline2"), xintercept = vline2.threshold, color = "blue") +
scale_color_manual("Threshold", values = c(vline1 = "red", vline2 = "blue"), labels = c("Mean", "Mean + 3*SD"))
system.time(print(g))
图例不显示:
但它更快:
utilisateur système écoulé
1.193 0.270 1.496
我怎样才能拥有两个世界中最好的东西,即一个传奇,快速展示?
答案
您可以使用第一种方法,但将空data.frame作为data
中的geom_vline
参数传递。速度问题是由geom_vline
中my.df
每行的data = data.frame()
绘制线造成的,它只绘制一次。
g2 <- ggplot(my.df, aes(x = dist)) +
geom_histogram(binwidth = 0.5) +
# pass empty data.frame as data
geom_vline(aes(color = "vline1", xintercept = vline1.threshold), data.frame()) +
# pass empty data.frame as data
geom_vline(aes(color = "vline2", xintercept = vline2.threshold), data.frame()) +
scale_color_manual("Threshold", values = c(vline1 = "red", vline2 = "blue"), labels = c("Mean", "Mean + 3*SD"))
# OPs solution
# system.time(print(g))
# user system elapsed
# 36.636 1.714 38.397
# data.frame() solution
# system.time(print(g2))
# user system elapsed
# 2.203 0.265 2.504
以上是关于geom_vline,传奇和表演的主要内容,如果未能解决你的问题,请参考以下文章
使用因式分解变量和 geom_hline / geom_vline 进行刻面
If else in ggplot +在geom_vline的字符和数字之间切换值