2015-06-26 8 views
6

Ich habe folgendes Diagramm:Wie kann ich Anmerkungen unter der x-Achse in ggplot2 hinzufügen?

library(ggplot2) 
library(scales) 
library(magrittr) 
df1 <- 
    structure(
    list(
     x = structure(
     1:5, .Label = c("5", "4", "3", "2", 
         "1"), class = "factor" 
    ), y = c(
     0.166666666666667, 0.361111111111111, 
     0.0833333333333333, 0.222222222222222, 0.291666666666667 
    ) 
    ), .Names = c("x", 
        "y"), row.names = c(NA,-5L), class = c("tbl_df", "tbl", "data.frame"), drop = TRUE 
) 

df1 %>% ggplot(aes(x , y)) + geom_bar(stat = "identity") + 
    scale_y_continuous(labels = percent) 

Ich möchte ein zwei Linien stellen mit fett gedruckten Text unter 5 und 1. Beispiel: ‚Höchste \ nValue‘ Balg 5 und ‚Der niedrigste \ nValue‘ unter 1 hinzufügen .

Ich versuchte geom_text, aber ich kann den Text nicht platzieren, wo ich will.

+1

annotation_custom() vielleicht ?, diesen Link finden Sie unter: http://docs.ggplot2.org/current/annotation_custom.html – erasmortg

Antwort

8

Dies kann mit annotation_custom() erfolgen. Ich zeichne von this answer.

Die Schwierigkeit besteht darin, dass ggplot Clips Anmerkungen, die außerhalb des Diagrammbereichs platziert werden, was Sie tun möchten. Clipping kann jedoch ausgeschaltet werden.

annotation_custom() verwendet Grobs, so dass Sie zuerst die sie erstellen müssen:

library(grid) 
text_high <- textGrob("Highest\nvalue", gp=gpar(fontsize=13, fontface="bold")) 
text_low <- textGrob("Lowest\nvalue", gp=gpar(fontsize=13, fontface="bold")) 

Als nächstes Sie den Plot einrichten und speichern:

p <- 
df1 %>% ggplot(aes(x , y)) + geom_bar(stat = "identity") + 
    scale_y_continuous(labels = percent) + 
    theme(plot.margin = unit(c(1,1,2,1), "lines")) + 
    annotation_custom(text_high,xmin=1,xmax=1,ymin=-0.07,ymax=-0.07) + 
    annotation_custom(text_low,xmin=5,xmax=5,ymin=-0.07,ymax=-0.07) 

Die dritte Zeile stellt sicher, dass es genug Platz unter der Handlung für Ihre Etiketten und die letzten beiden fügen Sie die Anmerkungen hinzu. Die Position wird als Min- und Max-Wert für beide Koordinaten angegeben. Der Grob wird in der Region zentriert sein, die durch diese Koordinaten definiert ist. In der gegenwärtigen Situation scheint es am einfachsten zu sein, einen Punkt zu definieren, indem Min- und Max-Werte identisch gesetzt werden.

Alles, was Sie jetzt tun müssen, ist Clipping deaktivieren wie folgt:

gt <- ggplot_gtable(ggplot_build(p)) 
gt$layout$clip[gt$layout$name == "panel"] <- "off" 
grid.draw(gt) 

Die letzte Zeile die Handlung zieht.

enter image description here

Verwandte Themen