【问题标题】:ggplot throws error `label not found`, while `label` is clearly thereggplot 抛出错误 `label not found`,而 `label` 显然存在
【发布时间】:2019-04-10 08:51:40
【问题描述】:

我可以使用geom_text 绘制以下df 的标签:

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

【问题讨论】:

  • 这是一个很好的问题,如果没有提供可重现的示例,将很难回答。

标签: r ggplot2


【解决方案1】:

您的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()

【讨论】:

  • 如果可能,请在此答案中添加更多细节。因为我还是不明白数据框中cld的概念。 @user322912
  • 您使用的是multcomp (cran.r-project.org/web/packages/multcomp/multcomp.pdf)吗?您正在使用的 data.frame 可能从该包中的 cld 对象继承了该类。
  • @mnm 我添加了更多细节。如果事情现在清楚(或不清楚),请告诉我。
  • @user322912 感谢您的更新。现在对我来说很有意义。
猜你喜欢
  • 2022-06-16
  • 2018-12-29
  • 2012-09-05
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 2015-06-18
  • 1970-01-01
相关资源
最近更新 更多