如何使'geom_text'在QPLOT(R编程)中识别'aes'

如何使'geom_text'在QPLOT(R编程)中识别'aes',r,plot,ggplot2,R,Plot,Ggplot2,我有一个数据看起来像 我想做的是创建一个刻面图,上面有标签。 可以从perc列轻松调用标签 使用此代码: dat.m <- read.delim("http://dpaste.com/1271039/plain/",header=TRUE,sep=" ") qplot(value, data=dat.m,facets=time~.,binwidth=1,main="")+ xlab("Value")+ ylab("Count")+ theme(legend.position="none"

我有一个数据看起来像

我想做的是创建一个刻面图,上面有标签。 可以从perc列轻松调用标签

使用此代码:

dat.m <- read.delim("http://dpaste.com/1271039/plain/",header=TRUE,sep=" ")

qplot(value, data=dat.m,facets=time~.,binwidth=1,main="")+
xlab("Value")+ ylab("Count")+
theme(legend.position="none")+
stat_bin(aes(value,label=sprintf("%.01f",perc)),geom="text")
我想做的是生成这个图:
您的问题部分出现

因为您正在使用qplot,这会让事情变得比您需要的更混乱

您已设置binwidth=2,这意味着每个直方图条可能基于2个值。perc到值的1对1映射现在是perc到装箱值的2对1映射

使用plyr继续hadleyesque实现,我们可以在绘图之前进行聚合

library(plyr)
agg.data <-  ddply(dat.m, .(value,time), summarize, p = unique(perc), n = length(perc))

ggplot(agg.data, aes(x= value)) + 
 geom_bar(aes(y = n),stat='identity') + 
 facet_grid(time~.) + 
 geom_text(aes(y=n, label = sprintf('%.01f',p)),vjust=-1,size=3)
要用无标签替换0.0,请使用带有一些定义技巧的ifelse,以避免复制测试

ggplot(dat.m, aes(x= value)) + 
   geom_histogram(binwidth=2) +  facet_grid(time~.) + 
   stat_bin(aes(y = ..count.., 
     label = ifelse(test = (xxx <- sprintf('%.01f', 100 * ..density..))=='0.0','',xxx)),
     binwidth=2,geom='text',vjust = -0.7)

你的问题部分出现了

因为您正在使用qplot,这会让事情变得比您需要的更混乱

您已设置binwidth=2,这意味着每个直方图条可能基于2个值。perc到值的1对1映射现在是perc到装箱值的2对1映射

使用plyr继续hadleyesque实现,我们可以在绘图之前进行聚合

library(plyr)
agg.data <-  ddply(dat.m, .(value,time), summarize, p = unique(perc), n = length(perc))

ggplot(agg.data, aes(x= value)) + 
 geom_bar(aes(y = n),stat='identity') + 
 facet_grid(time~.) + 
 geom_text(aes(y=n, label = sprintf('%.01f',p)),vjust=-1,size=3)
要用无标签替换0.0,请使用带有一些定义技巧的ifelse,以避免复制测试

ggplot(dat.m, aes(x= value)) + 
   geom_histogram(binwidth=2) +  facet_grid(time~.) + 
   stat_bin(aes(y = ..count.., 
     label = ifelse(test = (xxx <- sprintf('%.01f', 100 * ..density..))=='0.0','',xxx)),
     binwidth=2,geom='text',vjust = -0.7)

我会说我发现qplot语法只会让ggplot2更让我困惑。我无法使用ggplot语法找到解决问题的方法,但我建议您尝试这种方法-当绘图开始变得复杂时,更容易理解。如果perc变量与BIN不对应,这将如何工作?也许您应该手动将其装箱并在没有aes的情况下分配。时间类别中的每个值都与perc一一对应。例如,time=x,value=100总是让perc=7.6您设置了binwidth=2,这意味着每列可能对应两个perc值,从而对应两个perc值。@neversaint-我已经发布了一个答案,可以解决您的问题!我会说我发现qplot语法只会让ggplot2更让我困惑。我无法使用ggplot语法找到解决问题的方法,但我建议您尝试这种方法-当绘图开始变得复杂时,更容易理解。如果perc变量与BIN不对应,这将如何工作?也许您应该手动将其装箱并在没有aes的情况下分配。时间类别中的每个值都与perc一一对应。例如,time=x,value=100总是让perc=7.6您设置了binwidth=2,这意味着每列可能对应两个perc值,从而对应两个perc值。@neversaint-我已经发布了一个答案,可以解决您的问题!你救了我的命!谢谢有没有一种方法可以让我改变“尺寸”而不受装箱的影响?你救了我的命!谢谢是否有一种方法可以独立于装箱更改“大小”?
ggplot(dat.m, aes(x= value)) + 
   geom_histogram(binwidth=2) +  facet_grid(time~.) + 
   stat_bin(aes(y = ..count.., 
     label = ifelse(test = (xxx <- sprintf('%.01f', 100 * ..density..))=='0.0','',xxx)),
     binwidth=2,geom='text',vjust = -0.7)
qplot(value, data=dat.m,facets=time~.,binwidth=2,main="")+
     xlab("Value")+ ylab("Count")+
     theme(legend.position="none")+
     stat_bin(aes(value,label=ifelse(test = (xxx <-  
       sprintf("%.01f",..density..*100))=='0.0','',xxx)),geom="text",binwidth=2,vjust = -0.7)