我有一个具有多个级别的因素:
x <- as.factor(c(rep("A",20),rep("B",10),rep("C",15)))
尽可能以最短的方式,我想使用ggplot创建每个因子的%频率的条形图。
我一直发现,当我有一个因素时,在总结和绘图之间会有很多小烦恼。以下是我烦恼的几个例子:
as.data.frame(summary(x))
您必须重命名列,并且第一列值现在是最后一个示例中的rownames。在下一个,你必须作弊使用强制转换,然后你必须重新标记,因为它默认为“(所有)”的colname。
as.data.frame(q1$com.preferred)
dat$value <- 1
colnames(dat) <- c("pref", "value")
cast(dat, pref ~.)
colnames(dat)[2] <- "value"
这是另一个例子,有点好,但不太理想。
data.frame(x=names(summary(x)),y=summary(x))
如果在ggplot中有一个快速的方法可以做到这一点,我会非常有兴趣看到它。到目前为止,我最大的问题是将计数改为频率。
答案 0 :(得分:2)
关注@dirk和@joran的建议(@joran真的很有用。我认为as.data.frame()
,而不仅仅是data.frame()
,这是必要的,但事实证明@joran是正确的...... < / p>
x <- as.factor(c(rep("A",20),rep("B",10),rep("C",15)))
t1 <- table(x)
t2 <- data.frame(t1)
t3 <- data.frame(prop.table(t1))
qplot(x,Freq,data=t2,geom="bar",ylab="Count")
qplot(x,Freq,data=t3,geom="bar",ylab="Proportion")
修改:稍微缩短(也包含@ Chase的prop.table
)
答案 1 :(得分:2)
您可以让qplot在没有外部计算的情况下为您完成摘要工作,请尝试以下任何一项:
x <- rep(c('A','B','C'), c(20,10,15))
qplot(x, weight=1/length(x), ylab='Proportion')
qplot(x, weight=100/length(x), ylab='Percent')
qplot(x, weight=1/length(x), ylab='Percent') + scale_y_continuous(formatter='percent')
ggplot(data.frame(x=x),aes(x, weight=1/length(x))) + geom_bar() + ylab('Proportion')
也许有一种方法可以使用ggplot函数中的转换来实现这一点,但我还没有找到它。
答案 2 :(得分:1)
您是否尝试过只调用barplot(table(x)/length(x))
的ggplot相当于?即。
R> x <- as.factor(c(rep("A",20),rep("B",10),rep("C",15)))
R> table(x)
x
A B C
20 10 15
我们很容易变成百分比
R> table(x)/length(x)*100
x
A B C
44.4444 22.2222 33.3333
然后可以绘制
R> barplot(table(x)/length(x)*100)
很好: