尽管R中有aes_字符串,函数中的ggplot仍不工作

尽管R中有aes_字符串,函数中的ggplot仍不工作,r,ggplot2,R,Ggplot2,我有以下数据和代码,但功能不起作用: df1 firstvar secondvar 1 a1 25 2 a2 50 3 a3 75 df1 = structure(list(firstvar = c("a1", "a2", "a3"), secondvar = c(25L, 50L, 75L)), .Names = c("firstvar", "secondvar"), class = "data.frame

我有以下数据和代码,但功能不起作用:

df1
  firstvar secondvar
1       a1        25
2       a2        50
3       a3        75


df1 = structure(list(firstvar = c("a1", "a2", "a3"), secondvar = c(25L, 
50L, 75L)), .Names = c("firstvar", "secondvar"), class = "data.frame", row.names = c(NA, 
-3L))

myplot = function(ddf){ 
    ggplot(ddf) +
        geom_bar(aes_string(1, names(ddf)[2], fill=names(ddf)[1]), stat="identity")+
        geom_text(aes_string(x=1, y=cumsum(names(ddf)[2]), label=names(ddf)[2]))
}

myplot(df1)

Error: Discrete value supplied to continuous scale
In addition: Warning message:
In lapply(x, f) : NAs introduced by coercion
我尝试了scale_x_discrete()等,但没有效果。如何更正此错误

编辑: 功能失效时,以下代码运行良好:

ggplot() +
  geom_bar(aes(x=1, y=ddf[,2], fill=ddf[,1]), stat="identity")+
  geom_text(aes(x=1, y=cumsum(ddf[,2]), label=ddf[,2]))

您正在尝试对脚本第三行中的名称应用累积求和。这应该起作用:

myplot = function(ddf){ 
    ggplot(ddf) +
        geom_bar(aes_string(1, names(ddf)[2], fill=names(ddf)[1]), stat="identity")+
        geom_text(aes_string(x=1, y=cumsum((ddf)[2]), label=names(ddf)[2]))
}

cumsum(names(ddf)[2])
的预期目的是什么?将文本放在每个堆叠条的顶部。但是,从应用于名称的累积总和中,您期望得到什么?好的。我提供了aes_字符串的名称。但对于cumsum,我必须提供数据。y=cumsum((ddf)[2])运行良好。谢谢如果您输入此作为答案,我将接受它。