Tôi đã thử thêm một bảng tóm tắt nhỏ vào ô mà tôi đã tạo bằng ggplot2::ggplot()
. Bảng được thêm vào thông qua gridExtra::tableGrob()
đối tượng ggplot đã lưu.Thêm bảng vào ggplot với gridExtra và chú thích_custom() thay đổi giới hạn trục y
Vấn đề của tôi là điều này dường như thay đổi giới hạn y của bản gốc. Có cách nào để tránh điều đó mà không phải chỉ định lại giới hạn qua ylim()
không?
Dưới đây là một ví dụ rất nhỏ cho vấn đề bằng cách sử dụng dữ liệu 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: tôi chỉ ra rằng nó có vẻ là một vấn đề với stat_summary()
. Khi tôi sử dụng một geom/lớp khác, thì giới hạn ở lại như chúng ở trong cốt truyện ban đầu. Một ví dụ khác cho rằng:
plot2 = ggplot(data = ChickWeight, aes(x = Time, y = weight, color = Diet)) +
geom_jitter()
plot2
plot2 + annotation_custom(sum_table)
Tôi không chắc chắn về vấn đề này, nhưng tôi không nghĩ rằng đó là vấn đề với 'stat_summary' bạn làm' plot2 + stat_summary (fun.data = "mean_cl_boot", size = 1, alpha = .5) + annotation_custom (sum_table) 'thì ylim của bạn được giữ nguyên. – George
Điều đó thật thú vị. Nó đặt giới hạn y cho toàn bộ phạm vi dữ liệu thay vì từ 'geom = 'pointrange'' (mà' stat_summary' sử dụng theo mặc định). Vì vậy, nếu tôi thấy điều đó một cách chính xác, trong ví dụ đầu tiên của tôi ylim được điều chỉnh theo phạm vi của các giá trị tóm tắt và hiển thị (từ 'pointrange'), nhưng khi thêm' annotation_custom', nó sẽ sử dụng lại toàn bộ dữ liệu. – abel