2016-06-10 17 views
2

Meine Frage bezieht sich auf diese Frage. Ich will "2014" in der 4-Jahres-Facette. Ich habe versucht zu wiederholen, aber mein Code gibt nicht, was ich will.Fügen Sie Text zum Zeichnen mit facettiertem Balkendiagramm hinzu

Annotating text on individual facet in ggplot2

Dies ist meine Daten

structure(list(Rot = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("2-year", 
"3-year", "4-year"), class = "factor"), Rot.Herb = structure(c(3L, 
3L, 4L, 4L, 13L, 13L, 14L, 14L, 5L, 5L, 6L, 6L, 9L, 9L, 10L, 
10L, 15L, 15L, 16L, 16L, 1L, 1L, 2L, 2L, 7L, 7L, 8L, 8L, 11L, 
11L, 12L, 12L, 17L, 17L, 18L, 18L), .Label = c("A4-conv", "A4-low", 
"C2-conv", "C2-low", "C3-conv", "C3-low", "C4-conv", "C4-low", 
"O3-conv", "O3-low", "O4-conv", "O4-low", "S2-conv", "S2-low", 
"S3-conv", "S3-low", "S4-conv", "S4-low"), class = "factor"), 
    variable = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
    2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
    1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("Diversity", 
    "Evenness"), class = "factor"), N = c(4, 4, 4, 4, 4, 4, 4, 
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4), value = c(0.78537789925, 0.613408315, 
    1.305194686, 0.79519430975, 0.4481728555, 0.30608817425, 
    1.20978861475, 0.8580643725, 0.92387324875, 0.630166121, 
    0.945954185, 0.561172324, 1.43952456275, 0.8616864655, 1.23679146725, 
    0.831737624, 1.033474108, 0.80689293925, 0.9910142125, 0.79342098075, 
    1.175512223, 0.6293940245, 0.981614832, 0.62342189825, 1.351710013, 
    0.805075937, 1.6598348325, 0.7983622545, 1.01606920875, 0.5751418795, 
    1.0500365255, 0.56408326225, 1.07162937725, 0.6756859865, 
    0.45699816625, 0.44444147325), sd = c(0.354077266902404, 
    0.208934910331856, 0.169501822767995, 0.0774319459391732, 
    0.737366460962239, 0.40697977697835, 0.494107033311986, 0.11906912863268, 
    0.491492768082854, 0.34236657107712, 0.219739438843007, 0.205905593411204, 
    0.319301583035043, 0.0696484379979274, 0.0563293598951725, 
    0.0978700910274188, 0.446850757364563, 0.175073468716825, 
    0.426859848850874, 0.180469101499932, 0.526842123835502, 
    0.200470277385505, 0.574885944755375, 0.27189545397305, 0.39621771945215, 
    0.150798258847229, 0.275863362594154, 0.111178397407429, 
    0.254811233135664, 0.158920851982914, 0.198698241334475, 
    0.0730606635175717, 0.717706309307313, 0.453776579066358, 
    0.574276936403411, 0.513758415496589), se = c(0.177038633451202, 
    0.104467455165928, 0.0847509113839974, 0.0387159729695866, 
    0.368683230481119, 0.203489888489175, 0.247053516655993, 
    0.0595345643163399, 0.245746384041427, 0.17118328553856, 
    0.109869719421504, 0.102952796705602, 0.159650791517521, 
    0.0348242189989637, 0.0281646799475863, 0.0489350455137094, 
    0.223425378682282, 0.0875367343584126, 0.213429924425437, 
    0.090234550749966, 0.263421061917751, 0.100235138692753, 
    0.287442972377688, 0.135947726986525, 0.198108859726075, 
    0.0753991294236146, 0.137931681297077, 0.0555891987037145, 
    0.127405616567832, 0.0794604259914568, 0.0993491206672376, 
    0.0365303317587859, 0.358853154653656, 0.226888289533179, 
    0.287138468201705, 0.256879207748294), ci = c(0.563415944919255, 
    0.332462066715199, 0.26971522480343, 0.123211505132525, 1.1733145846647, 
    0.647595643784969, 0.786234551289211, 0.189465554245211, 
    0.782074671929471, 0.544781614588516, 0.349654482635521, 
    0.327641747494367, 0.508080071600555, 0.110826207087643, 
    0.089632581638694, 0.155733154793995, 0.71103927089404, 0.278580956835532, 
    0.679229274424713, 0.287166612643164, 0.838323385234058, 
    0.318992946792351, 0.914771825423139, 0.432646341459985, 
    0.630470808679215, 0.23995368085579, 0.438960169525453, 0.176909640028318, 
    0.40546153371869, 0.252878539112781, 0.316173242000635, 0.116255819336536, 
    1.14203089616693, 0.722059798737006, 0.91380275723334, 0.817504285602766 
    )), .Names = c("Rot", "Rot.Herb", "variable", "N", "value", 
"sd", "se", "ci"), row.names = c(NA, -36L), class = "data.frame") 

und der Code grafisch darzustellen

p <- ggplot(Shannon.long2, aes(x=Rot.Herb, y=value, fill=factor(variable)))+ 
    geom_bar(stat="identity", position="dodge")+ 
    scale_fill_brewer(palette = "Set1")+ 
    theme_bw() + 
    theme(panel.grid.major=element_blank()) + 
    facet_grid(~Rot, scales = "free_x", space="free_x")+ 
    theme(legend.title=element_blank(),legend.text=element_text(size=20),legend.position="top")+ 
    geom_errorbar(aes(ymin=value-se, ymax=value+se), size=0.5, width=.25,position=position_dodge(.9))+ 
    xlab("\nTreatment") + 
    theme(axis.title = element_text(size=24,face="bold", vjust=4), axis.text.x = element_text(size=20,angle = 90, hjust = 1)) + 
    ylab("Shannon's H' and E'") + 
    theme(axis.title = element_text(size=24,face="bold", vjust=2), axis.text.y = element_text(size=20, color="black"))+ 
    theme(strip.text.x = element_text(colour = "black", size = 20), strip.background = element_rect(fill = "white")) 

erzeugte Graphen (bitte nichts dagegen, die "2014" auf der y-Achse) . enter image description here

Neuer Code 2014 mit Hilfe von eipi10

ann_text <- data.frame(x = "S4-conv",y = 1.75,lab = "2014", Rot.Herb=NA, 
 
value=NA, variable=NA, 
 
N=NA, sd=NA, se=NA, ci=NA, 
 
Rot = factor("4-year",levels = c("2-year","3-year","4-year")))

zu annotieren ich einen Fehler bekam sagen Error: Discrete value supplied to continuous scale nachdem ich p + geom_text(data = ann_text,label = "2014") laufen. Bitte sehen Sie, was mit meinem Code und Datenformat nicht stimmt. Vielen Dank.

+0

Add 'ann_text $ Rot.Herb = NA' zu Annotations Datenrahmen. Auch wenn Sie diese Spalte nicht in 'geom_text' verwenden, erwartet ggplot, dass sie vorhanden ist, wenn diese Spalte für eine Ästhetik im Hauptaufruf von ggplot verwendet wird. – eipi10

+0

Vielen Dank für Ihre Hilfe. Meinst du:'n_text <- data.frame (x = "S4-conv", y = 1.75, lab = "2014", Rot = Faktor ("4-Jahre", levels = c ("2-Jahr", "3 Jahre", "4 Jahre"), ann_text $ Rot.Herb = NA)? Ich tat das und erhielt neuen Fehler 'Fehler in eval (Ausdruck, envir, enclos): Objekt 'Wert' nicht gefunden ' –

+0

Das ist, weil Sie auch die Spalte' value' in Ihrem ursprünglichen ggplot Anruf verwenden. Sie müssen also auch 'n_text $ value = NA' zu Ihrem neuen Datenrahmen hinzufügen. Jede Spalte, die beim ersten Aufruf von ggplot verwendet wird, muss sich auch in anderen Datenrahmen befinden, die Sie später in den Plot einfügen. – eipi10

Antwort

1

Es stellt sich heraus, das Problem ist, dass, wenn Sie value=NA in ann_text sind sie als logische interpretiert wird (und nicht numerisch, die in Shannon.long2 seinen Modus ist), die den Fehler verursacht, weil ggplot eine numerische Variable erwartet, anstatt eine kategorische ein. Setzen Sie value=NA_real_ (zusätzlich zu NA, R hat klassenspezifische fehlende Wert Konstanten; siehe ?NA für weitere Informationen) in ann_text, um sicherzustellen, value wird als numerisch interpretiert und den Fehler zu beheben. Oder setzen Sie value auf eine beliebige Nummer, z. B. value=0.

Im Beispiel unten habe ich all die theme und lab Aussagen entfernt, um den Code auf das Wesentliche zu verkürzen:

p = ggplot(Shannon.long2, aes(x=Rot.Herb, y=value, fill=factor(variable))) + 
    geom_bar(stat="identity", position="dodge") + 
    geom_errorbar(aes(ymin=value-se, ymax=value+se), size=0.5, width=.25,position=position_dodge(.9)) + 
    facet_grid(~Rot, scales = "free_x", space="free_x") 

ann_text <- data.frame(x = "S4-conv", y = 1.75, lab = "2014", Rot.Herb=NA, 
         value=NA_real_, variable=NA) 

p + geom_text(data = ann_text, aes(label=lab, x, y)) 

Beachten Sie, dass Sie auch an geom_text füttern x und y Werte brauchen Geben Sie den Standort des Labels an.

Eine weitere Option wäre, nur die gleichen X- und Y-Variablennamen wie in Ihrem ursprünglichen Datenrahmen zu verwenden, da ggplot diese Namen bereits kennt und das Diagramm basierend darauf skaliert hat. Nun ist die einzige fehlende Spalte wir hinzufügen müssen, ist variable:

ann_text <- data.frame(Rot.Herb = "S4-conv", value = 1.75, lab = "2014", variable=NA) 

p + geom_text(data = ann_text, aes(label=lab, Rot.Herb, value)) 
+0

Vielen Dank für Ihre Zeit bei der Untersuchung des Problems. Ich schätze wirklich. Verwendung dieses Satzes von Code –

+0

Ich landete 'ann_text <- data.frame (x = "C2-low", y = 1,75, lab = "2014", variable = NA_real_, Rot.Herb = NA, Wert = 0 , n = 0, s = 0, se = 0, Ci = 0, Rot = Faktor ("2-year", level = C ("2-year", "3-year", "4-year"))) p + geom_text (data = ann_text, aes (label = lab, x, y), size = 8) ' –