使用函数添加geom_vline,其中xintercept来自向量而不是ggplot数据

时间:2016-12-10 10:20:24

标签: r ggplot2

我想在ggplot上绘制多条线条,这些线条来自一个单独的向量。

library(ggplot2)

carats <- c(2.5, 0.1)

ggplot(diamonds, aes(carat)) +
  geom_histogram() +
  geom_vline(aes(xintercept = carats[1]), col = "black", linetype = "dotted", size = 0.5) +
  geom_vline(aes(xintercept = carats[2]), col = "black", linetype = "dotted", size = 0.5)

逐个添加它们,但我想避免这种方法添加使用draw_vline代替:

hist <- ggplot(diamonds, aes(carat)) + geom_histogram() 

draw_vline <- function(histogram, line_value){
  hist + geom_vline(aes(xintercept = line_value), col = "black", linetype = "dotted", size = 0.5)
}

draw_vline(hist, carats[1])

这给了我错误:

Error in eval(expr, envir, enclos) : object 'line_value' not found

如何指定我的函数来处理不在ggplot env中的外部向量?

1 个答案:

答案 0 :(得分:3)

aes()用于从数据框中的列映射数据。您没有数据框,_vline / _hline/ / _abline甚至显示默认使用 xinterceptyinterceptslope&amp; intercept aes()之外。如果您使用aes()设置提供了呼叫,这也可以在data中正常使用,但您没有。

library(ggplot2)

carats <- c(2.5, 0.1)

ggplot(diamonds, aes(carat)) +
  geom_histogram() +
  geom_vline(xintercept = carats, col = "black", linetype = "dotted", size = 0.5) 

enter image description here