R,ggplot堆积条形图,位置="填充"和标签

时间:2018-06-04 14:33:51

标签: r ggplot2 bar-chart


我使用ggplot2中的position = "fill"选项,使用geom_bar(),堆积条形图与相对值100%合作。
这是我的代码:

test <- data.frame (x = c('a','a','a','b','b','b','b')
        ,k = c('k','j','j','j','j','k','k')
        ,y = c(1,3,4,2,5,9,7))

plot <- ggplot(test, aes(x =x, y = y, fill = k)) 
plot <- plot + geom_bar(position = "fill",stat = "identity") 
plot <- plot +  scale_fill_manual(values = c("#99ccff", "#ff6666"))
plot <- plot  + geom_hline(yintercept = 0.50)+ggtitle("test")
plot

结果如下:

enter image description here

但是,我需要在各个条上添加标签,也需要在&#34;子条&#34;上添加标签。为此,我使用了geom_text():

plot  + geom_text(aes(label=y, size=4))

但结果并不好。我没有试过hjustvjust参数,也使用了类似的东西:

plot  + geom_text(aes(label=y/sum(y), size=4))

但是我没有达到所需的结果(我没有添加所有的测试,没有用无用的图像重载问题,如果需要,请问!)。
有没有想过要有一些好的中心标签?

1 个答案:

答案 0 :(得分:1)

let nvc : UIViewController = self.storyboard?.instantiateViewController(withIdentifier: "SongDetailVC") as! SongDetailsVC nvc.willMove(toParentViewController: self) playerMainView.addSubview(nvc.view) self.addChildViewController(nvc) nvc.didMove(toParentViewController: self) 指定要显示的内容label指定要显示的y。由于您使用where的y轴比例,您需要使用累积计算每个 position = "fill"的比例的标签位置(geom_text(aes(y = ...)))款项。此外,要仅显示给定颜色的总比例,您需要为每个x,k组合提取第N行。在这里,我正在构建一个单独的x数据集,以便在test_labels中显示自定义标签:

geom_text

<强>结果:

test <- data.frame (x = c('a','a','a','b','b','b','b'),
                    k = c('k','j','j','j','j','k','k'),
                    y = c(1,3,4,2,5,9,7))

test_labels = test %>%
  arrange(x, desc(k)) %>%
  group_by(x) %>%
  mutate(ylabel_pos = cumsum(y)/sum(y),
         ylabel = y/sum(y)) %>%
  group_by(k, add = TRUE) %>%
  mutate(ylabel = sum(ylabel)) %>%
  slice(n())

 ggplot(test, aes(x =x, y = y, fill = k)) +
  geom_bar(position = "fill", stat = "identity") +
  scale_fill_manual(values = c("#99ccff", "#ff6666")) +
  geom_hline(yintercept = 0.50) + 
  geom_text(data = test_labels, 
            aes(y = ylabel_pos, label=paste(round(ylabel*100,1),"%")), 
            vjust=1.6, color="white", size=3.5) +
  ggtitle("test")

the native property for the true smooth scrolling