Подобно этому вопросу, а также this, я предпочитаю иметь легенду чтобы geom_text был текстовой меткой, а не aaa. (т.е. «ааа» внутри круга в легенде ребенка должно быть 0,1,2,3,4. См. прилагаемое изображение)
Вот мои данные:
data.frame(
ID = c(1L, 3L, 5L, 11L, 13L, 18L, 20L, 24L, 33L, 34L, 36L),
sum_hrs = c(12, 8, 68, 44, 16, 12, 36, 16, 4, 20, 4),
avg_workload = c(263.1615,275.312,269.462444444444,
268.867666666667,276.686,257.3605,267.8695,268.3355,
239.409,260.230333333333,330.061),
avg_achv = c(92.5,98,94.2222222222222,
94.8333333333333,92,98,94.25,93.5,98,95.3333333333333,100),
mchild = c(1L, 0L, 1L, 2L, 3L, 0L, 4L, 0L, 2L, 0L, 1L),
drinker = as.factor(c("No","Yes","Yes",
"Yes","Yes","No","Yes","Yes","No","No",
"Yes"))
)
Я пробовал предложения ответов в связанных вопросах SO, но не смог заставить его работать. Скорее всего, у меня некорректная индексация гробов. Итак, я прочитал документацию, но до сих пор не могу ее понять. Вот что я сделал до сих пор:
p2 <- ggplot(data=sum_ua, aes(x=avg_achv, y=sum_hrs, size=mchild, color=drinker, alpha=sum_hrs)) +
geom_point() +
geom_text(data=sum_ua, aes(x=avg_achv, y=sum_hrs, label=mchild), color='#A9A9A9') +
scale_size(range=c(4,20)) +
scale_alpha_binned(range = c(0.01, 1), guide = 'none') +
new_scale_color()
g <- ggplotGrob(p2)
lbls <- unique(sort(sum_ua$mchild))
g$grobs[[15]][[1]][[1]]$grobs[[1]]$label <- lbls[1]
g$grobs[[15]][[1]][[1]]$grobs[[6]]$label <- lbls[2]
g$grobs[[15]][[1]][[1]]$grobs[[8]]$label <- lbls[3]
g$grobs[[grep("guide", g$layout$name)]]
grid.draw(g)
Вот мой результат:
Извините за основной вопрос и спасибо за вашу помощь!
Вместо того, чтобы возиться с таблицей графика графика, вы можете создать собственный
scale_discrete_identity()
для эстетики метки. Вам просто нужно убедиться, что на нем есть легенда и что вся информация аналогична легенде размера (заголовок, разрывы, метки и т. Д.).Создано 2021-02-01 пакетом REPEX (v0.3.0)
Большое вам спасибо, teunbrand. Это работает! Что делать, если я хотел убрать / скрыть текст рядом с кружками, что мне делать? Я пытался использовать scale_fill_identity, но не смог заставить его работать .. — person sarah am; 01.02.2021
Я думаю, вы можете сделать это, установив
labels = NULL
как для размера, так и для дискретной шкалы идентичности, или установивguide = guide_legend(label = FALSE)
в обеих этих шкалах. — person sarah am; 01.02.2021В вашем случае это работает
Или, чтобы избежать жесткого кодирования и повторения того же кода снова, мы можем использовать:
Спасибо, Ронак, ваш результат — это то, чего я пытаюсь достичь Но когда я попытался использовать ваше решение, у меня возникла эта ошибка .. Ошибка в _1 _ [[11]]: индекс вне пределов … Не могли бы вы мне помочь из? — person sarah am; 01.02.2021
Странно, что у меня отлично работает с данными, которыми вы поделились. Вы применяете это к тому же набору данных? В какой строке выдается ошибка? Вы запускали
g <- ggplotGrob(p2)
? Я не добавилnew_scale_color()
вp2
, так как не знаю, из какого он пакета, не уверен, имеет ли это какое-то значение. — person sarah am; 01.02.2021Ага, используя тот же набор данных. И да, я запустил g ‹- ggplotGrob (p2). Получил ошибку, начиная с этой строки: g $ grobs [[15]] [[1]] [[1]] $ grobs [[11]] $ label ‹- 2. Тогда я попытался изменить индекс grobs, и он похоже, что index больше 8 дает ошибку .. Я также удалил new_scale_color (), чтобы отразить ваш ответ .. Я думаю, что индексирование неправильное для моего графика .. Вы можете показать мне, как вы получаете индекс для каждой метки? (ваш индекс гроба 5, 8, 11, 14, 17) — person sarah am; 01.02.2021