Ho provato ad aggiungere una piccola tabella di riepilogo a un grafico che ho creato con ggplot2::ggplot()
. La tabella viene aggiunta tramite gridExtra::tableGrob()
all'oggetto ggplot salvato.Aggiunta di una tabella a ggplot con gridExtra e annotation_custom() modifica i limiti dell'asse y
Il mio problema è che questo sembra modificare i limiti y della mia trama originale. C'è un modo per evitarlo senza dover specificare nuovamente i limiti tramite ylim()
?
Ecco un esempio minimo per il problema utilizzando il set di dati ChickWeight:
# load packages
require(ggplot2)
require(gridExtra)
# create plot
plot1 = ggplot(data = ChickWeight, aes(x = Time, y = weight, color = Diet)) +
stat_summary(fun.data = "mean_cl_boot", size = 1, alpha = .5)
plot1
# create table to add to the plot
sum_table = aggregate(ChickWeight$weight,
by=list(ChickWeight$Diet),
FUN = mean)
names(sum_table) = c('Diet', 'Mean')
sum_table = tableGrob(sum_table)
# insert table into plot
plot1 + annotation_custom(sum_table)
EDIT: Ho appena capito che sembra essere un problema con stat_summary()
. Quando uso un'altra geom/layer, i limiti rimangono come erano nella trama originale. Un altro esempio per questo:
plot2 = ggplot(data = ChickWeight, aes(x = Time, y = weight, color = Diet)) +
geom_jitter()
plot2
plot2 + annotation_custom(sum_table)
Non sono sicuro del problema, ma non penso che sia un problema con 'stat_summary' che si fa' plot2 + stat_summary (fun.data = "mean_cl_boot", size = 1, alpha = .5) + annotation_custom (sum_table) 'allora il tuo ylim è preservato. – George
È interessante. Imposta i limiti y per l'intero intervallo di dati anziché quello da 'geom = 'pointrange'' (che' stat_summary' usa di default). Quindi, se lo vedo correttamente, nel mio primo esempio ylim viene adattato all'intervallo dei valori riepilogati e visualizzati (da 'pointrange'), ma quando si aggiunge' annotation_custom' usa di nuovo l'intervallo di tutti i dati. – abel