GGPLOT Legend News W / GEOM_POINT и GEOM_TEXT
Вопрос
Я пытаюсь использовать geom_point
Чтобы проиллюстрировать количество моих данных. Я также хотел бы аннотировать несколько очков на моем графике с geom_text
. Отказ Когда я добавляю вызов geom_text
, Похоже, что он замышляет что-то под точками в легенде. Я пробовал обратный порядок слоев безрезультатно. Я не могу обернуть голову, почему это делает это. Кто-нибудь видел это раньше?
set.seed(42)
df <- data.frame(x = 1:10
, y = 1:10
, label = sample(LETTERS,10, replace = TRUE)
, count = sample(1:300, 10, replace = FALSE)
)
p <- ggplot(data = df, aes(x = x, y = y, size = count)) + geom_point()
p + geom_text(aes(label = label, size = 150, vjust = 2))
Решение
Это случилось со мной все время. Трюк знает, что aes()
Карты данных в эстетику. Если нет данных для отображения (например, если у вас есть одно значение, которое вы определяете), нет причин использовать aes()
. Отказ Я верю, что только вещи внутри aes()
появится в вашей легенде.
Кроме того, когда вы указываете сопоставления внутри ggplot(aes())
, Эти отображения относятся к каждый последующий слой. Отказ Это хорошо для вашего х и у, так как оба 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)
Другие советы
Или, если вам нужно указать размер текста внутри AES, то Legend = False Sugpress Hense The Legends Geom:
p <- ggplot(data = df, aes(x = x, y = y, size = count)) + geom_point()
p + geom_text(aes(label = label, size = 150, vjust = 2), show_guide = FALSE)