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

sym*_*ush 4 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))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

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
Run Code Online (Sandbox Code Playgroud)

Rom*_*rik 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
Run Code Online (Sandbox Code Playgroud)

如果将其强制为data.frame,则效果很好。

ggplot(as.data.frame(df1), aes(x = x, y = y, label = label)) +
  geom_text()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明