我编写了一个函数来使用ggplot
函数获取比例堆积条形图。现在我在这个ID
中使用列名。
PropBarPlot<-function(df, mytitle=""){
melteddf<-melt(df, id="ID", na.rm=T)
ggplot(melteddf, aes(ID, value, fill=variable)) +
geom_bar(position="fill") +
theme(axis.text.x = element_text(angle=90, vjust=1)) +
labs(title=mytitle)
}
我想让它变得通用。所以我想使用列索引而不是列名。我尝试过做这样的事情。
PropBarPlot<-function(df, mytitle=""){
melteddf<-melt(df, id=names(df)[1], na.rm=T)
ggplot(melteddf, aes(names(df)[1], value, fill=variable)) +
geom_bar(position="fill") +
theme(axis.text.x = element_text(angle=90, vjust=1)) +
labs(title=mytitle)
}
但没有用。有人可以建议我怎么做吗?
感谢。
答案 0 :(得分:6)
正如@baptiste所指出的,你应该使用aes_string()
而不是aes()
来定义x和y值。另外,您应该将value
和variable
放在引号内。
PropBarPlot<-function(df, mytitle=""){
melteddf<-melt(df, id=names(df)[1], na.rm=T)
ggplot(melteddf, aes_string(x=names(df)[1],y= "value", fill="variable")) +
geom_bar(position="fill") +
theme(axis.text.x = element_text(angle=90, vjust=1)) +
labs(title=mytitle)
}