在ggplot中做facet我经常喜欢使用百分比而不是计数.
例如
test1 <- sample(letters[1:2], 100, replace=T)
test2 <- sample(letters[3:8], 100, replace=T)
test <- data.frame(cbind(test1,test2))
ggplot(test, aes(test2))+geom_bar()+facet_grid(~test1)
Run Code Online (Sandbox Code Playgroud)
这很容易,但如果N在方面A上与方面B不同,那么我认为比较百分比会更好,这样每个方面的总和达到100%.
你会怎么做到这一点?
希望我的问题有道理.
真诚.
Jam*_*mes 46
这是一个内部ggplot方法,使用..count..和..PANEL..:
ggplot(test, aes(test2)) +
geom_bar(aes(y = (..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..])) +
facet_grid(~test1)
Run Code Online (Sandbox Code Playgroud)
由于这是在运行中计算的,因此对于绘图参数的更改应该是稳健的.
dar*_*zig 21
试试这个:
# first make a dataframe with frequencies
df <- as.data.frame(with(test, table(test1,test2)))
# or with count() from plyr package as Hadley suggested
df <- count(test, vars=c('test1', 'test2'))
# next: compute percentages per group
df <- ddply(df, .(test1), transform, p = Freq/sum(Freq))
# and plot
ggplot(df, aes(test2, p))+geom_bar()+facet_grid(~test1)
Run Code Online (Sandbox Code Playgroud)

您还可以添加ggplot2版本0.8.9或版本0.9.0 + scale_y_continuous(formatter = "percent")的图表.+ scale_y_continuous(labels = percent_format())
一个非常简单的方法:
ggplot(test, aes(test2)) +
geom_bar(aes(y = (..count..)/sum(..count..))) +
facet_grid(~test1)
Run Code Online (Sandbox Code Playgroud)
所以我只将geom_bar的参数更改为aes(y = (..count..)/sum(..count..)).将ylab设置为NULL并指定格式化程序后,您可以获得:
ggplot(test, aes(test2)) +
geom_bar(aes(y = (..count..)/sum(..count..))) +
facet_grid(~test1) +
scale_y_continuous('', formatter="percent")
Run Code Online (Sandbox Code Playgroud)
更新
请注意,虽然formatter = "percent")适用于ggplot2版本0.8.9,但在0.9.0中你需要类似的东西scale_y_continuous(labels = percent_format()).

| 归档时间: |
|
| 查看次数: |
23585 次 |
| 最近记录: |