在ggplot中插入值的百分比

时间:2016-07-21 19:52:40

标签: r charts ggplot2

我是R的新手,但我正在尝试使用R中的facet_grid包进行ggplot,为了更好的数据可视化,我想插入值的百分比在列groupings的每个象限中,如下图所示:

http://i.stack.imgur.com/Zt7ev.png

可以是每个象限或图例中的一个或另一个。

我的代码是下面的

ggplot(df1_final,aes(x=revenue,y=visits,col=groupings)) +
  geom_jitter(alpha=I(1/2)) + 
  xlim(c(0,20000)) + 
  facet_grid(group_lvl_1_visits ~ group_lvl_1_revenue)

有人可以帮我吗?

编辑:这两种解决方案对我帮助很大,非常好。

2 个答案:

答案 0 :(得分:3)

以下是一种方法:

library(ggplot2)
ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  facet_wrap(~class, nrow = 4) ->
  p
p + geom_text(
  data = setNames(as.data.frame(prop.table(table(mpg$class))),c("class", "lab")),
  mapping = aes(label = scales::percent(lab)), 
  x = 4, 
  y = 40
)

enter image description here

或,facet_grid

p <- ggplot(mpg, aes(displ, cty)) + geom_point()
p <- p + facet_grid(drv ~ cyl)
p + geom_text(
  data = setNames(as.data.frame(prop.table(table(mpg$drv, mpg$cyl)), stringsAsFactors = F), c("drv","cyl","lab")),
  mapping = aes(label = scales::percent(lab)),
  x=4.5, 
  y=30
)

enter image description here

答案 1 :(得分:2)

这是一个tidyverse +标签传奇解决方案:

library(ggplot2)
library(dplyr)
library(scales)

group_by(mpg, cyl, drv) %>% 
  mutate(color=sprintf("%s-%s",cyl,drv)) %>% 
  ungroup(mpg) -> mpg

gg <- ggplot(mpg, aes(displ, cty))
gg <- gg + geom_point(aes(color=color))
gg <- gg + facet_grid(drv ~ cyl)

count(mpg, color) %>% 
  ungroup() %>% 
  mutate(pct=percent(n/sum(n)),
         lab=sprintf("%s (%s)", color, pct)) -> pct_df


gg <- gg + scale_color_discrete(name="Title", labels=pct_df$lab)
gg

enter image description here