【发布时间】:2017-01-25 20:28:26
【问题描述】:
我正在尝试使用循环在ggplot2 中绘制一系列框。下面,我包含了一个玩具示例。
# Load necessary library
library(ggplot2)
# Height of rectangle
box.size <- 0.5
# Colours for rectangles
my.cols <- c("red", "blue", "purple", "yellow", "green")
# Initialise plot & set limits
p <- ggplot() + xlim(0, 1) + ylim(0, 2.5)
# Loop through and draw boxes
for(i in 1:5){
# Draw boxes
p <- p + geom_rect(aes(xmin = 0, xmax = 1, ymin = (i - 1) * box.size, ymax = i * box.size),
fill = my.cols[i])
# Check that the loop is working
print(i)
}
# Plot graph
print(p)
这段代码只绘制了最终的矩形,但我不知道我做错了什么。循环运行正常,因为我包含了一个打印语句来检查。有人可以指出我的错误并提供解决方案吗?
【问题讨论】:
-
ggplot是为绘制数据而设计的。我建议您构建一个数据框(如果您愿意,可以在类似的循环中)然后绘制它。照原样,您正在尝试将螺丝刀用作锤子。 -
好的,明白了。感谢您的帮助。不过出于好奇:为什么代码会失败?
-
我不确定。我的
ggplot是围绕数据框设计的。你几乎肯定不应该在没有数据框的情况下使用aes(),但即使没有数据框,你的代码也不起作用。for循环与它无关 - 如果您手动写出前几次迭代,第一层按预期工作,而第二层则没有。