2017-06-19 1 views
1

Ich möchte etwas Text (p-Werte für meine echten Daten) oben auf der Plot-Region hinzufügen. Hier ist ein Beispiel, und was ich versucht:Wie füge ich Text außerhalb der Plot-Region hinzu, wenn coord_cartesian verwendet wird?

Daten:

library(tidyverse) 

set.seed(123) 
plt <- iris 
plt$Petal.Width <- plt$Petal.Width + rnorm(nrow(plt)) 

plt.text <- plt %>% group_by(Species) %>% summarise(label = max(Petal.Width)) 

ich reserviert sapce für die plt.text auf der Oberseite der Platte, aber der Text ist nicht erschienen:

p <- ggplot(plt, aes(x= Species, y = Petal.Width)) + 
    geom_violin() + 
    geom_text(aes(x = Species, y = 4, label = label), 
       data = plt.text, vjust = 0) + 
    coord_cartesian(ylim = c(-2, 4), expand = 0) + 
    theme(plot.margin = margin(0.2, 0.05, 0.05, 0.05, 'npc')) 

enter image description here

Nach this post, habe ich versucht:

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

enter image description here

Sie sehen können, obwohl der Text korrekt angezeigt wird, wird das trancated Violinstück auch in voller Höhe in dem oben Plot gezeigt. Wie kann ich den Text nur außerhalb der Plot-Region anzeigen und das Geigen-Plot weiterhin transkribieren lassen?

+1

Sie nutzen könnten [ 'cowplot'] (https://cran.r-project.org/web/packages/ cowplot/vignettes/introduction.html) für Plot Annotationen. – Axeman

Antwort

1

Was ich tun würde, mit cowplot:

p <- ggplot(plt, aes(x= Species, y = Petal.Width)) + 
    geom_violin() + 
    coord_cartesian(ylim = c(-2, 4), expand = 0) + 
    theme_grey() 
ann <- ggplot(plt.text, aes(x = Species, y = 0, label =label)) + 
    geom_text() + 
    theme_void() 


library(cowplot) 
plot_grid(ann, p, ncol = 1, rel_heights = c(.05, 1), align = 'v') 

+0

Ausgezeichnete Antwort. Ich habe nie daran gedacht, zwei Grundstücke zusammen zu stapeln! – mt1022

Verwandte Themen