Подтвердить что ты не робот

Проблема с легендой ggplot с 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))

alt text

4b9b3361

Ответ 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) 

Ответ 2

или, если вам нужно указать размер текста внутри aes, тогда legend = FALSE подавляет рисование легенд геометрии:

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)