ggplot объект не найден ошибка при добавлении слоя с различными данными

у меня есть график с некоторыми точками, и я хотел бы использовать сегмент для их соединения

dummy = data.frame(GROUP=c("A","B","C","D"),
                   X = c(80,75,68,78),
                   Y=c(30, 32,36,33)

)
df= data.frame(x1 = c(80), x2 =c(78) , y1=c(30), y2 =c(33))
df
library(ggplot2)
ggplot(dummy,aes(x=X,y=Y,color=GROUP)) + 
  geom_point() +
  geom_segment(aes(x=x1,y=y1,xend= x2, yend =y2), data = df) 

но я получаю эту ошибку

Error in eval(expr, envir, enclos) : object 'GROUP' not found

что я делаю неправильно здесь?

1 ответов


эстетическое отображение, определенное в исходном ggplot вызов будет унаследован всеми слоями. Поскольку вы инициализировали свой сюжет с color = GROUP, ggplot искать GROUP столбец в последующих слоях и выдает ошибку, если ее нет. Есть 3 хороших варианта это исправить:

Вариант 1: Set inherit.aes = F в слое вы не хотите наследовать эстетику. Большую часть времени это лучшее выбор.

ggplot(dummy,aes(x = X, y = Y, color = GROUP)) + 
  geom_point() +
  geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2),
               data = df,
               inherit.aes = FALSE) 

Вариант 2: только укажите эстетику, которую вы хотите унаследовать (или которую вы будете перезаписывать) в верхнем вызове - установите другую эстетику на уровне слоя:

ggplot(dummy,aes(x = X, y = Y)) + 
  geom_point(aes(color = GROUP)) +
  geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2),
               data = df) 

Вариант 3: конкретно NULL эстетика на слоях, когда они не применяются.

ggplot(dummy,aes(x = X, y = Y, color = GROUP)) + 
  geom_point() +
  geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2, color = NULL),
               data = df) 

что использовать?

большую часть времени Вариант 1 просто отлично. Это может раздражать, однако, если вы хотите некоторую эстетику наследуется слоем, и вы хотите изменить только один или два. Возможно, вы добавляете некоторые errorbars в сюжет и используете тот же x и color имена столбцов в ваших основных данных и данных errorbar, но ваши данные errorbar нет . Это хорошее время, чтобы использовать Вариант 2 или Вариант 3, чтобы избежать повторения x и color отображений.)