在ggplot2的for循环中使用geom_text

时间:2016-03-31 09:22:38

标签: r ggplot2 geom-text

我想使用geom_text()函数在ggplot图上显示文本标签列表。

这些标签的位置存储在一个列表中。

使用下面的代码时,只会显示第二个标签。

x <- seq(0, 10, by = 0.1)
y <- sin(x)
df <- data.frame(x, y)
g <- ggplot(data = df, aes(x, y)) + geom_line()

pos.x <- list(5, 6)
pos.y <- list(0, 0.5)

for (i in 1:2) {
  g <- g + geom_text(aes(x = pos.x[[i]], y = pos.y[[i]], label = paste("Test", i)))
}

print(g)

知道这段代码有什么问题吗?

2 个答案:

答案 0 :(得分:3)

我不确定如何在for循环中使用geom_text,但您可以通过提前定义文本标签并使用annotate来实现所需的结果。请参阅下面的代码。

library(ggplot2)
x <- seq(0, 10, by = 0.1)
y <- sin(x)
df <- data.frame(x, y)

pos.x <- c(5, 6)
pos.y <- c(0, 0.5)
titles <- paste("Test",1:2)
ggplot(data = df, aes(x, y)) + geom_line() + 
annotate("text", x = pos.x, y = pos.y, label = titles)

答案 1 :(得分:3)

我同意@ user2728808的答案是一个很好的解决方案,但这是你的代码出了什么问题。

def save(self, *args, **kwargs): self.username = self.username.lower() return super(User, self).save(*args, **kwargs) 中删除aes将解决问题。应该使用geom_text将变量从aes参数映射到美学。通过使用data或提供单个值,使用它可以产生意想不到的结果。

代码

$

enter image description here