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
отображений.)