我可以画出下面的标签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)
您df1的类别是cld和data.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)