【问题标题】:Rearrange order of fields used with geom_col/geom_bar's aesthetic fill重新排列与 geom_col/geom_bar 的美学填充一起使用的字段顺序
【发布时间】:2022-08-18 01:37:03
【问题描述】:

数据:

group  attendance percent
      <chr>  <chr>        <dbl>
    1 group1 never           72
    2 group1 infrequent      24
    3 group1 often            4
    4 group2 never           24
    5 group2 infrequent      43
    6 group2 often           33
    7 group3 never           10
    8 group3 infrequent      38
    9 group3 often           53

目标:

我想显示一个条形图(geom_col):X = 百分比,Y = 组和填充 = 出勤率

问题:

我的问题是,尽管数据框的顺序如上所示,但我每次都将其剪切,但我的 ggplot 将填充颜色渲染为“从不,经常,不经常”,而不是“从不,不经常,经常”。

Here is the graph I get.

我有点发疯了,试图找出我做错了什么,而且我对 R 很陌生,所以很感激人们给我的任何指点。

我尝试过的:

  • 我遇到了一个旧的 aes 参数“order”,但它似乎不再是 ggplot2 的一部分。
  • 我在谷歌上搜索了一吨,发现一些提到“stat = \'identity\'\”的东西,但这似乎只适用于 geom_bar,geom_col 显然使它变得多余......无论哪种方式,如果我更改为 geom_bar并使用 stat=\'identity\' 我得到一个相同的图表。
  • 我已尝试以其他方式重建数据框,以便以不同的顺序获取数据。
  • 我尝试创建不同的图表以类似的方式呈现数据,但没有一个比我想在这里创建的更清晰,我知道这应该是可能的。
  • 当我发现有一个 \'scale_fill_manual\' 选项时,我真的很兴奋将在这种情况下呈现,因为我只是没有从文档中得到它
  • 我尝试使用限制和 scale_x/scale_y,但无法弄清楚其中任何一个如何链接到填充选项或我可能需要哪些变体 - 基本上我已经用完了 在这一点上要尝试的新事物。

这将我带到这里......任何帮助将不胜感激 - 我对 R 非常陌生并且热​​衷于学习,所以如果我是一个完全的白痴并且应该是,请随时为我指出正确的方向能够很容易地弄清楚。

非常感谢,我已尽我所能,让这篇文章尽可能容易理解——这是我的第一篇文章——但如果我做错了什么,请告诉我,这样我就可以适应未来(我确信这不是我唯一的问题。)

可重现的代码:

这是一些应该给出可重现示例的代码

library(tidyverse)
library(ggplot)

# create dataframe
group <- c(\'group1\', \'group2\',\'group3\')
never <- c(72,24,10)
infrequent <- c(24,43,38)
often <- c(4,33,53)
df <- data.frame(group, never, infrequent, often)

# I then pivot the data to be more readable to for ggplot - sorry if this is a really round about way to do this (I\'m still learning a lot!)
df <- df %>% pivot_longer(cols=c(\'never\', \'infrequent\', \'often\'),
             names_to=\'attendance\',
             values_to=\'percent\')
order <- c(\'never\', \'infrequent\', \'often\')

# render graph
ggplot(df, aes(x = percent, y=group, fill=attendance)) +
geom_col(width=0.75, position = \'fill\',  color=\'#000000\')
  • 您需要将出勤率作为一个因素,将因素水平按您喜欢的任何顺序排列。试试fill = factor(attendance, order)

标签: r ggplot2


【解决方案1】:

试试下面的。

suppressPackageStartupMessages({
  library(dplyr)
  library(tidyr)
  library(ggplot2)
})

# create dataframe
group <- c('group1', 'group2','group3')
never <- c(72,24,10)
infrequent <- c(24,43,38)
often <- c(4,33,53)
df <- data.frame(group, never, infrequent, often)

order <- c('never', 'infrequent', 'often')

df %>% 
  pivot_longer(cols = c('never', 'infrequent', 'often'),
               names_to = 'attendance',
               values_to = 'percent') %>%
  mutate(attendance = factor(attendance, levels = order)) %>% 
  # render graph
  ggplot(aes(x = percent, y = group, fill = attendance)) +
  geom_col(width=0.75, position = 'fill',  color = '#000000') +
  scale_x_continuous(labels = scales::percent)

reprex package (v2.0.1) 于 2022 年 8 月 17 日创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2021-12-22
    相关资源
    最近更新 更多