Я думаю, вам не хватает inherit.aes = FALSE
во втором geom_text
. Вкратце, во втором geom_text
вы вызываете новый фрейм данных, однако ggplot
все еще ищет категорию заполнения field
, которую вы установили в первом aes
во втором фрейме данных. Так как он не существует, он печатает ошибку.
Если вы использовали inherit.aes = FALSE
, это будет указывать ggplot
не принимать во внимание предыдущие аргументы отображения (NB: I подмножество dfsum
соответствует значениям m
в первом кадре данных) :
library(ggplot2)
ggplot(df_report, aes(x = m, y = total, fill= field))+
geom_col()+
geom_text(aes(label = total),
position=position_stack(0.5))+
geom_text(inherit.aes = FALSE, data = subset(dfsum, m %in% 1:3),
aes(x = m, y = Sum, label = Sum), vjust = -0.25)+
ylim(0,1000)
Пример данных
df_report (эквивалентно вашему fac_report_field
):
structure(list(Row = 1:6, y = c(2016L, 2016L, 2016L, 2016L, 2016L,
2016L), m = c(1L, 1L, 2L, 2L, 3L, 3L), ym = c(201601L, 201601L,
201602L, 201602L, 201603L, 201603L), field = c("Non_life", "Life",
"Non_life", "Life", "Non_life", "Life"), total = c(499L, 297L,
433L, 253L, 609L, 336L), paid = c(143L, 100L, 128L, 82L, 176L,
94L), others = c(355L, 189L, 305L, 166L, 433L, 235L), opinion = c(1L,
8L, 0L, 5L, 0L, 7L), plc_ratio = c(28.7, 34.6, 29.6, 33.1, 28.9,
28.6)), row.names = c(NA, -6L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x55eb576ff5c0>)
dfsum (эквивалентно вашему fac_report_sum
):
structure(list(Row = 1:6, y = c(2016L, 2016L, 2016L, 2016L, 2016L,
2016L), m = 1:6, Sum = c(796L, 686L, 945L, 698L, 1003L, 1201L
)), row.names = c(NA, -6L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x55eb576ff5c0>)