代码之家  ›  专栏  ›  技术社区  ›  J.Sabree

通过响应GGR中的条形图,按组添加百分比标签

  •  0
  • J.Sabree  · 技术社区  · 8 年前

    我正在试着做一个条形图,它能显示出不同工作类型的人对某个话题表示同意、不同意和中立的百分比。在这张图上,我想做两件我想不通的事:

    1. 我想包括每个工作组中同意、不同意和感觉中立的每个人的百分比。虽然我已经知道了如何将百分比添加到图表中,但标签中显示的百分比是总样本的百分比,而不仅仅是特定工作组的百分比。例如,如果我的总样本有1000人,但是Job 1只有100人,那么如果10人不同意,我希望标签上写10%(10/100);然而,它目前表示为1%(10/1000)。
    2. 我想添加示例n by job group以显示在标题下的x轴上。例如,在Job 1下,我希望它表示n=100。

    这是我目前拥有的代码:

     #colors
     RYG_Cols <- c("red", "yellow", "green3")
    
     #graph
    dataset1 %>%
    filter(!is.na(question1)) %>%
    filter(jobgroup == "Job 1" | jobgroup == "Job 2" | jobgroup == "Job 3") %>%
    ggplot(aes(x = jobgroup, fill = question1)) +
    geom_bar(position = "fill")  +
    scale_y_continuous(labels = percent_format(), limits=c(0,1)) +
    theme(axis.title.x=element_blank(),
        axis.title.y = element_blank()) +
    theme(strip.text.x = element_text(size = 12)) +
    guides(fill=FALSE) +
    ggtitle("Working Title") +
    theme(plot.title = element_text(hjust = 0.5)) +
    theme(panel.background = element_rect(fill = NA, color = "grey")) +
    scale_fill_manual(values = RYG_Cols) + 
    geom_text(aes(label = scales::percent(round((..count..)/sum(..count..),2)), 
                y= ((..count..)/sum(..count..))), stat="count", position = 
    position_fill(vjust=.5))
    

    Picture of Plot with above code

    编辑:我还被要求提供一些样本数据:

    ID  jobgroup question1
    1   Job 2   Agree
    2   Job 2   Agree
    3   Job 3   Agree
    4   Job 3   Agree
    5   Job 1   Agree
    6   Job 3   Neutral
    7   Job 2   Agree
    8   Job 1   Agree
    9   Job 3   Agree
    10  Job 3   Agree
    11  Job 1   Agree
    12  Job 3   Agree
    13  Job 1   Agree
    14  Job 2   Agree
    15  Job 2   Agree
    16  Job 3   Agree
    17  Job 3   Agree
    18  Job 3   Agree
    19  Job 2   Agree
    20  Job 3   Agree
    21  Job 3   Neutral
    22  Job 1   Agree
    23  Job 2   Agree
    24  Job 3   Agree
    25  Job 3   Disagree
    26  Job 1   Agree
    27  Job 1   Agree
    28  Job 2   Agree
    29  Job 3   Agree
    30  Job 3   Agree
    31  Job 3   Agree
    32  Job 3   Agree
    33  Job 1   Agree
    34  Job 3   Agree
    35  Job 3   Agree
    36  Job 1   Agree
    37  Job 3   Agree
    38  Job 3   Agree
    39  Job 3   Agree
    40  Job 3   Agree
    41  Job 3   Agree
    42  Job 3   Agree
    43  Job 3   Neutral
    44  Job 2   Agree
    45  Job 1   Agree
    46  Job 3   Neutral
    47  Job 3   Agree
    48  Job 3   Disagree
    49  Job 2   Agree
    50  Job 3   Agree
    51  Job 3   Neutral
    52  Job 2   Neutral
    53  Job 3   Neutral
    54  Job 2   Agree
    55  Job 1   Agree
    56  Job 1   Agree
    57  Job 1   Agree
    58  Job 1   Agree
    59  Job 3   Agree
    60  Job 3   Agree
    61  Job 3   Agree
    62  Job 3   Agree
    63  Job 2   Agree
    64  Job 3   Agree
    65  Job 3   Agree
    66  Job 2   Agree
    67  Job 2   Agree
    68  Job 3   Agree
    69  Job 3   Agree
    70  Job 3   Agree
    71  Job 3   Agree
    72  Job 3   Agree
    73  Job 3   Agree
    74  Job 3   Agree
    75  Job 2   Agree
    76  Job 1   Agree
    77  Job 1   Agree
    78  Job 2   Neutral
    79  Job 3   Agree
    80  Job 2   Agree
    81  Job 2   Agree
    82  Job 3   Agree
    83  Job 3   Agree
    84  Job 3   Agree
    85  Job 2   Agree
    86  Job 3   Agree
    87  Job 2   Agree
    88  Job 3   Agree
    89  Job 3   Neutral
    90  Job 3   Agree
    91  Job 3   Agree
    92  Job 2   Agree
    93  Job 3   Disagree
    94  Job 3   Agree
    95  Job 3   Agree
    96  Job 3   Agree
    97  Job 3   Agree
    98  Job 3   Agree
    99  Job 3   Agree
    100 Job 3   Agree
    101 Job 2   Agree
    102 Job 3   Agree
    103 Job 2   Agree
    104 Job 2   Neutral
    105 Job 3   Agree
    106 Job 3   Disagree
    107 Job 2   Agree
    108 Job 3   Agree
    109 Job 2   Agree
    110 Job 3   Agree
    111 Job 3   Agree
    112 Job 2   Agree
    113 Job 3   Neutral
    114 Job 1   Agree
    115 Job 1   Agree
    116 Job 3   Agree
    117 Job 2   Agree
    118 Job 3   Agree
    119 Job 3   Agree
    120 Job 3   Agree
    121 Job 3   Neutral
    122 Job 3   Neutral
    123 Job 3   Agree
    124 Job 2   Agree
    125 Job 3   Agree
    126 Job 3   Agree
    127 Job 1   Agree
    128 Job 2   Neutral
    129 Job 3   Neutral
    130 Job 3   Disagree
    131 Job 1   Agree
    132 Job 2   Agree
    133 Job 3   Agree
    134 Job 3   Agree
    135 Job 2   Agree
    136 Job 3   Agree
    137 Job 3   Agree
    138 Job 3   Agree
    139 Job 2   Agree
    140 Job 2   Agree
    141 Job 3   Agree
    142 Job 3   Agree
    143 Job 1   Agree
    144 Job 2   Agree
    145 Job 2   Agree
    146 Job 3   Neutral
    147 Job 2   Agree
    148 Job 2   Agree
    149 Job 1   Agree
    150 Job 3   Agree
    151 Job 3   Agree
    152 Job 2   Agree
    153 Job 3   Agree
    154 Job 3   Agree
    155 Job 1   Agree
    156 Job 3   Agree
    157 Job 3   Agree
    158 Job 2   Agree
    159 Job 3   Agree
    160 Job 1   Agree
    161 Job 1   Agree
    162 Job 3   Agree
    163 Job 3   Agree
    164 Job 3   Agree
    165 Job 3   Agree
    166 Job 3   Agree
    167 Job 3   Agree
    168 Job 1   Agree
    169 Job 3   Agree
    170 Job 3   Agree
    171 Job 1   Agree
    172 Job 3   Agree
    173 Job 3   Agree
    174 Job 2   Agree
    175 Job 2   Agree
    176 Job 2   Agree
    177 Job 3   Agree
    178 Job 1   Agree
    179 Job 2   Agree
    180 Job 3   Agree
    181 Job 3   Agree
    182 Job 3   Agree
    183 Job 1   Agree
    184 Job 3   Agree
    185 Job 3   Agree
    186 Job 3   Agree
    187 Job 1   Agree
    188 Job 2   Agree
    189 Job 1   Agree
    190 Job 3   Agree
    191 Job 3   Agree
    192 Job 3   Agree
    193 Job 3   Agree
    194 Job 3   Agree
    195 Job 3   Agree
    196 Job 3   Agree
    197 Job 3   Agree
    198 Job 3   Agree
    199 Job 2   Agree
    200 Job 3   Agree
    201 Job 1   Agree
    202 Job 3   Agree
    203 Job 3   Agree
    204 Job 1   Agree
    205 Job 3   Agree
    206 Job 3   Agree
    207 Job 3   Agree
    208 Job 3   Agree
    209 Job 1   Agree
    210 Job 2   Agree
    211 Job 2   Agree
    212 Job 3   Agree
    213 Job 3   Agree
    214 Job 1   Agree
    215 Job 3   Agree
    216 Job 3   Agree
    217 Job 3   Agree
    218 Job 3   Agree
    219 Job 1   Agree
    220 Job 3   Agree
    221 Job 1   Agree
    222 Job 1   Agree
    223 Job 3   Agree
    224 Job 3   Agree
    225 Job 3   Agree
    226 Job 1   Neutral
    227 Job 1   Agree
    228 Job 1   Agree
    229 Job 3   Agree
    230 Job 3   Agree
    231 Job 2   Agree
    232 Job 2   Agree
    233 Job 3   Agree
    234 Job 3   Agree
    235 Job 1   Agree
    236 Job 2   Agree
    237 Job 1   Agree
    238 Job 3   Agree
    239 Job 1   Agree
    240 Job 3   Agree
    241 Job 1   Agree
    242 Job 3   Agree
    243 Job 3   Agree
    244 Job 3   Agree
    245 Job 1   Agree
    246 Job 3   Agree
    247 Job 3   Agree
    248 Job 3   Agree
    249 Job 3   Agree
    250 Job 1   Agree
    251 Job 3   Agree
    252 Job 1   Agree
    253 Job 1   Agree
    254 Job 3   Agree
    255 Job 3   Agree
    256 Job 3   Agree
    257 Job 3   Neutral
    258 Job 3   Agree
    259 Job 1   Agree
    260 Job 2   Agree
    261 Job 3   Agree
    262 Job 3   Agree
    263 Job 1   Agree
    264 Job 3   Agree
    265 Job 1   Agree
    266 Job 1   Agree
    267 Job 1   Agree
    268 Job 1   Agree
    269 Job 2   Agree
    270 Job 3   Agree
    271 Job 3   Neutral
    272 Job 3   Agree
    273 Job 3   Agree
    274 Job 3   Agree
    275 Job 2   Agree
    276 Job 2   Neutral
    277 Job 3   Agree
    278 Job 3   Agree
    279 Job 1   Agree
    280 Job 1   Agree
    281 Job 3   Neutral
    282 Job 1   Agree
    283 Job 1   Agree
    284 Job 3   Agree
    285 Job 3   Agree
    286 Job 2   Neutral
    287 Job 1   Agree
    288 Job 3   Agree
    289 Job 2   Agree
    290 Job 3   Agree
    291 Job 3   Neutral
    292 Job 2   Agree
    293 Job 3   Agree
    294 Job 3   Agree
    295 Job 3   Agree
    296 Job 1   Agree
    297 Job 3   Neutral
    298 Job 1   Agree
    299 Job 2   Agree
    300 Job 3   Agree
    301 Job 3   Agree
    302 Job 1   Agree
    303 Job 3   Agree
    304 Job 3   Agree
    305 Job 2   Agree
    306 Job 3   Agree
    307 Job 1   Agree
    308 Job 2   Agree
    309 Job 2   Agree
    310 Job 3   Agree
    311 Job 1   Agree
    312 Job 3   Agree
    313 Job 3   Agree
    314 Job 3   Agree
    315 Job 3   Agree
    316 Job 3   Agree
    317 Job 1   Agree
    318 Job 2   Agree
    319 Job 3   Agree
    320 Job 3   Agree
    321 Job 3   Agree
    322 Job 2   Agree
    323 Job 3   Agree
    324 Job 3   Agree
    325 Job 3   Agree
    326 Job 2   Neutral
    327 Job 1   Agree
    328 Job 2   Agree
    329 Job 3   Agree
    330 Job 3   Agree
    331 Job 3   Agree
    332 Job 3   Agree
    333 Job 1   Agree
    334 Job 2   Agree
    335 Job 3   Agree
    336 Job 3   Agree
    337 Job 2   Agree
    338 Job 1   Agree
    339 Job 2   Neutral
    340 Job 3   Agree
    341 Job 3   Agree
    342 Job 3   Agree
    343 Job 3   Agree
    344 Job 3   Agree
    345 Job 3   Agree
    346 Job 2   Agree
    347 Job 1   Agree
    348 Job 3   Agree
    349 Job 3   Agree
    350 Job 1   Agree
    351 Job 3   Agree
    352 Job 3   Disagree
    353 Job 3   Agree
    354 Job 3   Agree
    355 Job 3   Neutral
    356 Job 1   Agree
    357 Job 3   Agree
    358 Job 2   Agree
    359 Job 3   Agree
    360 Job 3   Agree
    361 Job 3   Agree
    362 Job 3   Agree
    363 Job 3   Neutral
    364 Job 3   Neutral
    365 Job 1   Agree
    366 Job 3   Agree
    367 Job 3   Agree
    368 Job 3   Agree
    369 Job 3   Agree
    370 Job 3   Agree
    371 Job 1   Agree
    372 Job 3   Agree
    373 Job 3   Agree
    374 Job 3   Agree
    375 Job 3   Agree
    376 Job 3   Agree
    377 Job 1   Agree
    378 Job 1   Agree
    379 Job 3   Agree
    380 Job 3   Agree
    381 Job 2   Agree
    382 Job 3   Agree
    383 Job 3   Disagree
    384 Job 3   Agree
    385 Job 1   Agree
    386 Job 1   Agree
    387 Job 3   Agree
    388 Job 2   Agree
    389 Job 1   Agree
    390 Job 2   Neutral
    391 Job 3   Agree
    392 Job 3   Neutral
    393 Job 3   Agree
    394 Job 1   Agree
    395 Job 1   Agree
    396 Job 3   Agree
    397 Job 1   Agree
    398 Job 3   Disagree
    399 Job 3   Agree
    400 Job 3   Disagree
    401 Job 3   Agree
    402 Job 2   Agree
    403 Job 3   Agree
    404 Job 1   Agree
    405 Job 1   Agree
    406 Job 1   Agree
    407 Job 1   Agree
    408 Job 1   Agree
    409 Job 3   Agree
    410 Job 1   Agree
    411 Job 1   Disagree
    412 Job 3   Neutral
    413 Job 3   Agree
    414 Job 3   Agree
    415 Job 3   Agree
    416 Job 1   Agree
    417 Job 3   Agree
    418 Job 3   Agree
    419 Job 3   Agree
    420 Job 2   Agree
    421 Job 3   Agree
    422 Job 3   Disagree
    423 Job 3   Agree
    424 Job 2   Agree
    425 Job 1   Agree
    426 Job 3   Agree
    427 Job 1   Agree
    428 Job 1   Agree
    429 Job 1   Agree
    430 Job 3   Agree
    431 Job 1   Agree
    432 Job 1   Agree
    433 Job 1   Agree
    434 Job 1   Agree
    435 Job 3   Agree
    436 Job 2   Agree
    437 Job 3   Agree
    438 Job 3   Agree
    439 Job 3   Agree
    440 Job 3   Agree
    441 Job 2   Agree
    442 Job 3   Agree
    443 Job 1   Agree
    444 Job 3   Agree
    445 Job 2   Agree
    446 Job 3   Agree
    447 Job 3   Agree
    448 Job 3   Agree
    449 Job 2   Agree
    450 Job 2   Agree
    451 Job 3   Agree
    452 Job 3   Neutral
    453 Job 3   Agree
    454 Job 1   Agree
    455 Job 3   Agree
    456 Job 3   Neutral
    457 Job 2   Agree
    458 Job 3   Agree
    459 Job 3   Agree
    460 Job 3   Agree
    461 Job 3   Agree
    462 Job 3   Agree
    463 Job 3   Agree
    464 Job 3   Agree
    465 Job 2   Agree
    466 Job 3   Agree
    467 Job 3   Agree
    468 Job 1   Agree
    469 Job 3   Agree
    470 Job 1   Agree
    471 Job 2   Agree
    472 Job 1   Agree
    473 Job 1   Agree
    474 Job 3   Agree
    475 Job 3   Agree
    476 Job 3   Agree
    477 Job 1   Agree
    478 Job 3   Neutral
    479 Job 1   Agree
    480 Job 3   Agree
    481 Job 3   Disagree
    482 Job 1   Agree
    483 Job 1   Agree
    484 Job 3   Agree
    485 Job 3   Agree
    486 Job 3   Neutral
    487 Job 1   Agree
    488 Job 1   Agree
    489 Job 3   Neutral
    490 Job 1   Agree
    491 Job 1   Agree
    492 Job 1   Agree
    493 Job 3   Agree
    494 Job 3   Agree
    495 Job 3   Neutral
    496 Job 3   Neutral
    497 Job 3   Agree
    498 Job 3   Agree
    499 Job 3   Agree
    500 Job 3   Agree
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Shirin Yavari    8 年前

    dataset1$question1 <- factor(dataset1$question1, levels = c("Disagree","Agree","Neutral"))
    ggplot(dataset1 %>% 
    group_by(jobgroup) %>% 
    count(question1) %>%    # Group by jobgroup, then count number in each question1
    mutate(jobgroupCnt=paste(jobgroup," , n= ",sum(n), sep=""), #this variable gives the total count within each jobgroup
    pct=n/sum(n)),     # Calculate percent within each jobgroup
    aes(jobgroupCnt, pct, fill=question1,order=question1)) +
    geom_bar(stat="identity") +
    geom_text(aes(label=paste0(sprintf("%1.1f", pct*100),"%")),
    position=position_stack(vjust=0.5),size=3)+
    labs(title = "", y = "Percent", x = "Job Group")+ #add the title yourself 
    theme(legend.title = element_blank(),
    panel.grid.major = element_blank(),
    axis.text.x=element_text(hjust=0.5,vjust=0.5), #adjusted both vertically and horizontally on the center
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black"))
    

    enter image description here