ggplot抛出错误“找不到标签”,而“标签”显然在那里

时间:2019-04-10 08:51:41

标签: 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))

enter image description here

但是,当尝试对真实数据使用相同的绘图机制时,会出现错误:

  

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 个答案:

答案 0 :(得分:5)

您的df1属于clddata.frame类(请参见str的上述输出的第二行)。似乎ggplot不喜欢该对象首先是cld。为了解决这个问题,使用as.data.frame会强制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()

enter image description here