繁体   English   中英

ggplot2:使用循环绘制几个框

[英]ggplot2: plotting several boxes using a loop

我正在尝试使用循环在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)

这段代码仅绘制了最后一个矩形,但是我无法弄清楚自己在做什么。 该循环正确运行,因为我包含了要检查的打印语句。 有人可以指出我的错误并提供解决方案吗?

我同意格雷戈尔。 只需执行一个函数,循环或语句即可构造基础数据,然后使用ggplot2对其进行ggplot2

library(ggplot2)

box.size <- 0.5

df <- data.frame(xmin = rep(0, 5),
           xmax = rep(1,5),
           ymin = (seq(1:5)-1) * box.size,
           ymax = seq(1:5) * box.size,
           fill = c("red", "blue", "purple", "yellow", "green"))

 ggplot(df) +
  geom_rect(aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = fill)) +
  scale_fill_identity()

在此处输入图片说明

正如Gregor所指出的,ggplot不能与循环一起使用。 您需要先将坐标设置为数据框:

library(dplyr)
library(ggplot2)
mydf <- data.frame(my.cols, tmp = rep(box.size, 5), i = 1:5)
mydf <- mutate(mydf, ymin = (i - 1) * tmp, ymax = tmp * i)
mydf <- select(mydf, -tmp, -i)

ggplot(mydf) + xlim(0,1) + ylim(0, 2.5) + geom_rect(aes(xmin = 0, xmax = 1, ymin = ymin, ymax = ymax), fill = my.cols)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM