#r #ggplot2
#r #ggplot2
Вопрос:
Я могу отобразить метки следующего df
, используя geom_text
:
df <- data.frame(
x = c(610, 426, 569, 253),
y = c(-226, -276, -364, -185),
label = c("accomplishments per week", "hours worked per week", "perceived adequacy of accomplishments", "energy level"),
stringsAsFactors = FALSE
)
ggplot(df, aes(x, y)) geom_text(aes(label = label))
Однако при попытке использовать тот же механизм построения графика с моими реальными данными я получаю сообщение об ошибке:
Error in FUN(X[[i]], ...) : object 'label' not found
Почему это так и как я могу это решить?
Вот мои реальные данные df1
:
df1 <- structure(list(type = c("var", "var", "var", "var"),
id = c(1,2, 4, 7),
x = c(610, 426, 569, 253), y = c(-226, -276, -364, -185),
label = c("accomplishments per week", "hours worked per week", "perceived adequacy of accomplishments", "energy level"),
from = c(NA_real_,NA_real_, NA_real_, NA_real_),
to = c(NA_integer_, NA_integer_,NA_integer_, NA_integer_),
polarity = c(NA_character_, NA_character_, NA_character_, NA_character_),
group = c(1L, 1L, 1L, 1L)), .Names = c("type","id", "x", "y", "label", "from", "to", "polarity", "group"),
row.names = 7:10, class = c("cld", "data.frame")
)
df
type id x y label from to polarity group
7 var 1 610 -226 accomplishments per week NA NA <NA> 1
8 var 2 426 -276 hours worked per week NA NA <NA> 1
9 var 4 569 -364 perceived adequacy of accomplishments NA NA <NA> 1
10 var 7 253 -185 energy level NA NA <NA> 1
Комментарии:
1. Это отличный вопрос, на который было бы очень сложно ответить без предоставления воспроизводимого примера.
Ответ №1:
Ваш df1
класс cld
и data.frame
(см. Вторую строку в приведенном выше выводе str
). Казалось бы, ggplot не нравится, что объект является cld
первым. Чтобы обойти это, используя as.data.frame
forces df1
, чтобы стать data.frame
только классом. Вы можете использовать class(df1)
, чтобы проверить это, или посмотреть str(df1)
Вывод ниже. Обратите внимание на строку «Классы».
> str(df1)
Classes ‘cld’ and 'data.frame': 4 obs. of 9 variables:
$ type : chr "var" "var" "var" "var"
$ id : num 1 2 4 7
$ x : num 610 426 569 253
$ y : num -226 -276 -364 -185
$ label : chr "accomplishments per week" "hours worked per week" "perceived adequacy of accomplishments" "energy level"
$ from : num NA NA NA NA
$ to : int NA NA NA NA
$ polarity: chr NA NA NA NA
$ group : int 1 1 1 1
Если вы принудите его data.frame
, он будет работать нормально.
ggplot(as.data.frame(df1), aes(x = x, y = y, label = label))
geom_text()
Комментарии:
1. Пожалуйста, если возможно, добавьте немного больше деталей к этому ответу. Потому что я все еще не понимаю концепцию cld во фрейме данных. @user322912
2. Вы использовали
multcomp
( cran.r-project.org/web/packages/multcomp/multcomp.pdf )? Возможно, используемый вами data.frame унаследовал класс отcld
объекта из этого пакета.3. @mnm Я добавил еще несколько деталей. Пожалуйста, дайте мне знать, если теперь все ясно (или нет).
4. @user322912 спасибо за обновление. Теперь это имеет смысл для меня.