Ответ 1
Это происходило со мной все время. Трюк знает, что aes()
отображает данные в эстетику. Если нет данных для сопоставления (например, если у вас есть одно значение, которое вы определяете), нет причин использовать aes()
. Я считаю, что в вашей легенде будут отображаться только вещи внутри aes()
.
Кроме того, когда вы указываете отображения внутри ggplot(aes())
, эти сопоставления применяются к каждому последующему слою. Это полезно для ваших x и y, поскольку оба geom_point
и geom_text
используют их. Это плохо для size = count
, поскольку это относится только к точкам.
Итак, это мои два правила для предотвращения такого рода вещей:
- Поместите только сопоставления на основе данных внутри
aes()
. Если аргумент принимает одно предварительно определенное значение, перейдите его к слою внеaes()
. - Данные карты только для тех слоев, которые будут использовать ее. Следствие: только данные карты внутри
ggplot(aes())
, если вы уверены, что каждый последующий слой будет использовать его. В противном случае сопоставьте его на уровне уровня.
Итак, я бы построил это так:
p <- ggplot(data = df, aes(x = x, y = y)) + geom_point(aes(size = count))
p + geom_text(aes(label = label), size = 4, vjust = 2)