Я попытался добавить небольшую сводную таблицу к сюжету, который я создал с помощью ggplot2::ggplot()
. Таблица добавляется через gridExtra::tableGrob()
в сохраненный объект ggplot.Добавление таблицы в ggplot с gridExtra и annotation_custom() изменяет пределы оси y
Моя проблема заключается в том, что это, похоже, меняет пределы y моего первоначального сюжета. Есть ли способ избежать этого, не указывая снова пределы через ylim()
?
Вот минимальный пример задачи с использованием набора данных 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: Я просто понял, что это, кажется, проблема с stat_summary()
. Когда я использую другой геом/слой, тогда ограничения остаются такими же, как и в исходном сюжете. Другой пример, что:
plot2 = ggplot(data = ChickWeight, aes(x = Time, y = weight, color = Diet)) +
geom_jitter()
plot2
plot2 + annotation_custom(sum_table)
Я не уверен в проблеме, но я не думаю, что это проблема с 'stat_summary', которую вы делаете' plot2 + stat_summary (fun.data = "mean_cl_boot", size = 1, alpha = .5) + annotation_custom (sum_table) ', тогда ваш илим сохраняется. – George
Это интересно. Он задает y-пределы для всего диапазона данных, а не из 'geom = 'pointrange'' (который используется' stat_summary' по умолчанию). Поэтому, если я правильно это вижу, в моем первом примере ylim настраивается на диапазон суммированных и отображаемых значений (из 'pointrange'), но при добавлении' annotation_custom' он снова использует диапазон всех данных. – abel