R ggplot2在循环中标记图
我想把每个图形的垂直线和垂直线的标签放在一个循环中。行的位置保存在数据帧“网格”中 虽然线的位置看起来正确,但标签值及其位置已关闭。我的问题是为什么R ggplot2在循环中标记图,r,for-loop,ggplot2,R,For Loop,Ggplot2,我想把每个图形的垂直线和垂直线的标签放在一个循环中。行的位置保存在数据帧“网格”中 虽然线的位置看起来正确,但标签值及其位置已关闭。我的问题是为什么 library(ggplot2) library(grid) library(gridExtra) plots <- list() grid <- data.frame(x=seq(4), y=c(200, 400, 600, 800)) for (
library(ggplot2)
library(grid)
library(gridExtra)
plots <- list()
grid <- data.frame(x=seq(4), y=c(200, 400, 600, 800))
for (i in 1:4) {
V1 <- rnorm(1000)
V2 <- seq(1000)
df <- data.frame(V1, V2)
plots[[i]] <- ggplot(df, aes(x= V2, y=V1)) +
geom_point() +
geom_vline(xintercept = grid[i,2], color="red")+
geom_text(aes(x=grid[i,2], label=grid[i,2], y=3))
}
grid.arrange(grobs=plots, nrow=2)
库(ggplot2)
图书馆(网格)
图书馆(gridExtra)
绘图我会采用不同的方法,使用方面
我也可能会在facet/loop之外计算示例(第二个选项)
库(ggplot2)
grid_df我会采用不同的方法,使用方面
我也可能会在facet/loop之外计算示例(第二个选项)
库(ggplot2)
理想情况下,您应该使用注释
。以下代码按预期工作
库(ggplot2)
图书馆(网格)
图书馆(gridExtra)
绘图理想情况下,您应该使用注释
。以下代码按预期工作
库(ggplot2)
图书馆(网格)
图书馆(gridExtra)
情节为了回答你问题的“为什么”部分,我不得不做一点实验。也许其他人可以用更多的专家知识和事实来丰富我的解释(我只是根据我的直觉回答:D)
由于似乎没有问题,如果在循环内部或在循环外部(在另一个1:4迭代的循环中)打印绘图,我认为绘图[[I]]只存储生成绘图的语法。如果在循环外部执行plot[[i]],它将使用grid[i,2]来指定geom_文本部分的标签和位置。循环外i为4,这就是为什么所有绘图使用相同的位置/标签(800)
但我真的不明白为什么geom_vline的行为不一样,或者为什么aes.inherit或lapply的使用解决了这个问题。。。如果其他人能对此有所了解,我将不胜感激:)
库(ggplot2)
图书馆(网格)
图书馆(gridExtra)
情节为了回答你问题的“为什么”部分,我不得不做一点实验。也许其他人可以用更多的专家知识和事实来丰富我的解释(我只是根据我的直觉回答:D)
由于似乎没有问题,如果在循环内部或在循环外部(在另一个1:4迭代的循环中)打印绘图,我认为绘图[[I]]只存储生成绘图的语法。如果在循环外部执行plot[[i]],它将使用grid[i,2]来指定geom_文本部分的标签和位置。循环外i为4,这就是为什么所有绘图使用相同的位置/标签(800)
但我真的不明白为什么geom_vline的行为不一样,或者为什么aes.inherit或lapply的使用解决了这个问题。。。如果其他人能对此有所了解,我将不胜感激:)
库(ggplot2)
图书馆(网格)
图书馆(gridExtra)
嗨,对我来说,诀窍就是设定。geom_文本中的inherit.aes=FALSE。我也试图找出原因,但我找不到一个好的答案。如果在每次迭代中打印绘图,则绘图是完美的。如果您在lappy中使用代码(而不是plots[[i]]只是plots),它也可以工作。因此,geom_文本似乎覆盖了for循环中所有以前的列表元素。。。这似乎很奇怪。更奇怪的是,情节的其余部分没有受到影响。。。如果有人对这个问题有一个很好的答案,请分享:)你真的需要考虑使用方面。循环不是R中的最佳实践,大多数时候,特别是当矢量化解决方案可用时。嗨,对我来说,诀窍是设置。geom_文本中的inherit.aes=FALSE。我也试图找出原因,但我找不到一个好的答案。如果在每次迭代中打印绘图,则绘图是完美的。如果您在lappy中使用代码(而不是plots[[i]]只是plots),它也可以工作。因此,geom_文本似乎覆盖了for循环中所有以前的列表元素。。。这似乎很奇怪。更奇怪的是,情节的其余部分没有受到影响。。。如果有人对这个问题有一个很好的答案,请分享:)你真的需要考虑使用方面。循环不是R中的最佳实践,大多数情况下,特别是当矢量化解决方案可用时。
library(ggplot2)
library(grid)
library(gridExtra)
plots <- list()
grid <- data.frame(x=seq(4), y=c(200, 400, 600, 800))
for (i in 1:4) {
V1 <- rnorm(1000)
V2 <- seq(1000)
df <- data.frame(V1, V2)
plots[[i]] <- ggplot(df, aes(x= V2, y=V1)) +
geom_point() +
geom_text(aes(x=grid[i,2], label=grid[i,2], y=3)) +
geom_vline(xintercept = grid[i,2], color="red")
print(plots[[i]]) # not part of the original syntax
}
# leads to wrong position of geom_text
plots
# leads to wrong position of geom_text
grid.arrange(grobs=plots, nrow=2)
# correct position of geom_text
for (i in 1:4){
print(plots[[i]])
}
# new grid values also affect plots
grid <- data.frame(x=seq(4), y=c(2000, 4000, 6000, 8000))
# leads to wrong position of geom_text
plots