2017-12-27 26 views
2

Ich möchte ein gefülltes Rechteck in R erstellen, mit weißem Text in der Mitte zentriert, und exportieren Sie es nach PNG. Ich weiß, dass die rect() Funktion dies wahrscheinlich tun kann, aber jedes Beispiel, das ich das Rechteck gesehen habe, wird auf einer Handlung gedruckt. Gibt es einen Weg, dies ohne die Handlung zu tun?Erstellen Sie ein Rechteck mit Text gefüllt

Als Referenz, ich baue eine blogdown() Website und versuche, ein Quadrat zu schaffen, das mit denen in der Hugrid Thema ziemlich identisch aussieht.

Antwort

1

Es ist nicht ganz aus Ihrer Frage klar, was genau der Knackpunkt ist. Müssen Sie die Rechtecke von R generieren (statt, sagen wir, manuell in Illustrator)? Und kein Plot-Fenster muss angezeigt werden?

All dies kann erreicht werden. Ich ziehe es vor, mit ggplot2 zu zeichnen, und die spezifischen Geoms, die Sie hier benötigen, sind geom_tile() für die Rechtecke und geom_text() für den Text. Und Sie können in png speichern, ohne einen Plot zu erstellen, indem Sie ggsave() verwenden.

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

machte ich vier Rechtecke in diesem Beispiel. Wenn Sie nur einen benötigen, können Sie einfach einen Eingabedatenrahmen mit nur einer Zeile erstellen.

3

Sie können geom_rect() verwenden, um Rechtecke und geom_text() zu erstellen, um Text in sie einzufügen. Das Ändern des Rechtecks ​​(Farbe, Liniengröße oder Typ) in ggplot2 ist einfach. Alles, was Sie tun müssen, ist Standard ggplot2 Blick mit theme_classsic() und element_blank() entfernen.

# 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

ist es 'theme_void()' für solche Fälle. Sie müssen das Theme nicht manuell leeren. –

+0

@ClausWilke danke! Wird im Gedächtnis bleiben – PoGibas

2

Hier ist eine leichte Lösung,

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