我正在尝试使用适当的标题自动创建直方图。
a <- c('aaa','bbb','ccc','aaa','bbb','ccc','aaa',
'bbb','ccc','aaa','bbb','ccc','aaa','bbb','ccc');
b <- rnorm(15,0,1);
c <- data.frame(a,b);
regions<-sort(unique(a));
有没有办法在我的regions
命令中输入aggregate(
对象才能做我想要的事情?
我想象的另一个选择是使用split()
使用循环和数据框列表,但我想避免使用它。
答案 0 :(得分:2)
以下是两个ggplot解决方案
# create more interesting example
set.seed(1) # for reproducibility
a <- rep(c('aaa','bbb','ccc'), each=100)
b <- rnorm(length(a),mean=rep(1:3, each=100))
c <- data.frame(a,b)
library(ggplot2)
ggplot(c, aes(x=b, fill=a, color=a)) +
geom_histogram(binwidth=0.5, position="identity", alpha=.5)
ggplot(c, aes(x=b, fill=a)) +
geom_histogram(binwidth=0.5, position="identity", color="grey70")+
facet_grid(a~.)
答案 1 :(得分:1)
如果您正在尝试创建三个直方图,每个区域一个,适当标题,您可以使用sapply
来避免显式编写循环。
# rename your data.frame c as df
colnames(df) <- c('region', 'val')
# filter your df by region, and create a title histogram
sapply(regions, function(x) hist(df[df['region'] == x, 2], main=x)
结果仍然需要一些爱,但这应该让你开始使用三个单独标题的直方图。
答案 2 :(得分:0)
这样的事情怎么样?
a <- c('aaa','bbb','ccc','aaa','bbb','ccc','aaa',
'bbb','ccc','aaa','bbb','ccc','aaa','bbb','ccc');
b <- rnorm(15,0,1);
c <- aggregate(b,by=list(a),FUN=sum)
barplot(c$x, names.arg=c$Group.1,space = 0)