使用R中的堆栈栏一起计数和百分比 [英] Count and Percent Together using Stack Bar in R

查看:138
本文介绍了使用R中的堆栈栏一起计数和百分比的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在同一张图中创建带有计数和百分比的堆栈栏.我从获得帮助的情况下,在ggplot2的堆叠条形图中显示数据值并添加组总数,并将我的图像绘制为

I am trying to create stack bar with counts and percent in same graph. I took help from Showing data values on stacked bar chart in ggplot2 and add group total and plotted my as

By using code 

### to plot stacked bar graph with total on the top and
###    distribution of the frequency;

library(ggplot2);
library(plyr);
library(dplyr);

Year      <- c(rep(c("2006-07", "2007-08", "2008-09", "2009-10"), each = 4))
Category  <- c(rep(c("A", "B", "C", "D"), times = 4))
Frequency <- c(168, 259, 226, 340, 216, 431, 319, 368, 423, 645, 234, 685, 166, 467, 274, 251)
Data      <- data.frame(Year, Category, Frequency);


sum_count <- 
   Data %>%
  group_by(Year) %>%
  summarise(max_pos = sum(Frequency));

sum_count;


Data <- ddply(Data, .(Year), transform, pos = 
cumsum(Frequency) - (0.5 * Frequency));

Data;



# plot bars and add text
p <- ggplot(Data, aes(x = Year, y = Frequency)) +
     geom_bar(aes(fill = Category), stat="identity") +
     geom_text(aes(label=Frequency,y = pos), size = 3) +  
     geom_text(data = sum_count, 
     aes(y = max_pos, label = max_pos), size = 4,
     vjust = -0.5);

print(p);

/现在我想用计数覆盖每个组的百分比这是我的方法.合并数据,这样我们就可以计算 每个您要处理的组的百分比/

/Now I want to overlay percent of each group with counts This is my approach.merge data such a way that we can calculate % for each of the group you are dealing with/

    MergeData <- merge(Data,sum_count,by="Year");

    MergeData <- transform(MergeData,
    per_cent=round((pos/max_pos)*100,0));
    MergeData<- ddply(MergeData, .(Year), transform, per_pos = 
    cumsum(per_cent) - (0.5 * per_cent));

    # calculate percent and attach % sign;

    MergeData <- transform(MergeData,
    per_cent=paste(round((pos/max_pos)*100,0),"%"));

    # Data only with percents

    Percent_Data <- subset(MergeData,select 
    = c("Year","Category","per_cent","per_pos"));

/我想知道是否可以将百分比数据覆盖到使用先前代码创建的图像上,以便可以将数字和百分比一起显示./

推荐答案

我认为您快到了. 使用MergeData作为数据帧的源,并向geom_text

I think you are almost there. Use MergeData as the source for the data frame and add one more call to geom_text

p <- ggplot(MergeData, aes(x = Year, y = Frequency, group = Category)) +
 geom_bar(aes(fill = Category), stat="identity") +
 geom_text(aes(label=Frequency,y = pos), size = 3, vjust = 1) +  
 geom_text(
        aes(y = max_pos, label = max_pos), size = 4,
        vjust = -.5) + 
 geom_text(aes(x = Year, y = pos, label = per_cent), vjust = -1, size = 4)

  print(p);

您可能需要摆弄hjustvjust来获得想要的文本.

You may need to fiddle with hjust and vjust to get the text just how you like it.

这篇关于使用R中的堆栈栏一起计数和百分比的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆