我有4个实验组的比例响应数据,每组计算2个不同的统计量。我想要下图(我可以实现):
我用下面的代码得到这个数字:
Group<-c('a','b','c','d','a','b','c','d')
Statistic<-c('Mean','Mean','Mean','Mean','d','d','d','d')
Val<-c(.75,.83,.79,.69,.5,.02,.1,.3)
dfm2<-data.frame(cbind(Group,Statistic,Val))
ggplot(dfm2,aes(x = Group,y = Val)) +
geom_bar(aes(fill = Statistic),position = dodge',stat='identity')
但是,当我通过添加以下代码行更改y轴的界限(更改为[0,1],因为我有比例)时:
+ scale_y_continuous(limits=c(0, 1))
我得到
错误:离散值提供给连续刻度
所以我明白这意味着我有一个非连续变量。我尝试过使用as.numeric()
和无数其他选项转换我的统计变量,但没有效果。如果有人能帮助我解决这个问题和/或解释是什么原因,我将不胜感激。
2条答案
按热度按时间r8xiu3jd1#
问题是在
data.frame
中不必要地使用了cbind
。cbind
创建了一个矩阵。矩阵的所有值必须具有相同的模式(数字、字符等)。由于至少有一个变量(本例中为两个)是字符模式,因此cbind
也会将Val
强制为字符。data.frame
会将三个字符变量转换为因子(更新:自R 4.0.0起,字符串在默认情况下不再转换为因子)。无论哪种方式,Val
都是离散(分类)值而非数值,因此在使用scale_y_continuous
时会导致错误。更改为
dfm2 <- data.frame(Group,Statistic,Val)
,错误将消失。您可以检查
cbind
和data.frame
对数据类型的影响,如下所示:如果不想让
data.frame
将字符串转换为因子,请添加参数stringsAsFactors=FALSE
。qhhrdooz2#
尝试以下方法。