创建一个填充文本的矩形

时间:2017-12-27 03:39:32

标签: r ggplot2 blogdown

我想在R中创建一个填充矩形,中间居中显示白色文本,然后将其导出到png。我知道rect()函数可能会这样做,但是我看到矩形的每个例子都打印在一个图上。如果没有情节,有没有办法做到这一点?

作为参考,我要构建一个blogdown()网站,并尝试创建一个与Hugrid主题中的广场完全相同的广场。

3 个答案:

答案 0 :(得分:3)

您可以使用geom_rect()创建矩形,使用geom_text()将文字粘贴到其中。在ggplot2中修改矩形外观(颜色,线条大小或类型)很容易。您所要做的就是删除ggplot2theme_classsic()的默认element_blank()外观。

# Generate dummy dataset
foo <- data.frame(x1 = 1, x2 = 2, y1 = 1, y2 = 2,
                  text = paste(letters[1:3], letters[1:3], collapse = "\n"))

# Plot rectangle with text
library(ggplot2)
ggplot(foo) +
    geom_rect(aes(xmin = x1, xmax = x2, ymin = y1, ymax = y2),
              color = "black", size = 2, fill = "lightblue") +
    geom_text(aes(x = x1 + (x2 - x1) / 2, y = y1 + (y2 - y1) / 2,
                  label = text),
              size = 20) +
    theme_classic() +
    theme(axis.line  = element_blank(),
          axis.ticks = element_blank(),
          axis.text  = element_blank(),
          axis.title = element_blank())

enter image description here

答案 1 :(得分:2)

这是一个轻量级的解决方案,

rects <- data.frame(fill = RColorBrewer::brewer.pal(5, "Pastel1"),
                    colour = RColorBrewer::brewer.pal(5, "Set1"),
                    label = paste("text", 1:5), stringsAsFactors = FALSE)
library(gridExtra)
gl <- mapply(function(f,l,c) grobTree(rectGrob(gp=gpar(fill=f, col="white",lwd=2)),
                                      textGrob(l, gp=gpar(col=c))),
             f = rects$fill, l = rects$label, c = rects$colour,
             SIMPLIFY = FALSE)

grid.arrange(grobs=gl)

enter image description here

答案 2 :(得分:1)

从你的问题中不清楚究竟什么是关键点。您是否需要从R生成矩形(而不是在Illustrator中手动生成)?并且不得显示情节窗口?

所有这一切都可以实现。我更喜欢用ggplot2绘制,你需要的特定geom是geom_tile()用于矩形,geom_text()用于文本。并且您可以使用ggsave()保存到png而不生成绘图。

rects <- data.frame(x = 1:4,
                    colors = c("red", "green", "blue", "magenta"),
                    text = paste("text", 1:4))

library(ggplot2)
p <- ggplot(rects, aes(x, y = 0, fill = colors, label = text)) +
  geom_tile(width = .9, height = .9) + # make square tiles
  geom_text(color = "white") + # add white text in the middle
  scale_fill_identity(guide = "none") + # color the tiles with the colors in the data frame
  coord_fixed() + # make sure tiles are square
  theme_void() # remove any axis markings

ggsave("test.png", p, width = 4.5, height = 1.5)

enter image description here

在这个例子中我制作了四个矩形。如果只需要一个,则只需要一行输入数据框。