Это случалось со мной все время. Хитрость заключается в том, что 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)