【发布时间】:2023-03-27 20:41:01
【问题描述】:
我有一个数据集,我正在尝试创建一个分组条形图。组是时间点之前和之后,子组是 6 个不同的设备。前面只有 6 个子组中的 3 个,而后面有所有 6 个子组。我有两个主要问题:获取代码以按升序排列子组,以及将图左侧的“之前”组与“之后”组进行比较。
以下是我为数据集 FDA_co_tier 提供的代码:
library(tidyverse)
library(ggplot2)
F_dev_dec <- FDA_co_tier%>%
select(device_type, year_approved) %>%
mutate(year_2015 = if_else(year_approved >= 2015, "after", "before")) %>%
mutate(year_2015 = factor(year_2015, levels=c("before", "after"))) %>%
group_by(device_type, year_2015) %>%
summarise(N=n()) %>%
mutate(N= factor(N, levels = N))
这给了我一个表格:
`summarise()` has grouped output by 'device_type'. You can override using the `.groups` argument.
# A tibble: 9 x 3
# Groups: device_type [6]
device_type year_2015 N
<chr> <fct> <fct>
1 Accessories after 6
2 Aspiration_catheter before 4
3 Aspiration_catheter after 32
4 Guidewire before 3
5 Guidewire after 23
6 Microcatheter after 7
7 Sheath after 19
8 Stentretriever before 17
9 Stentretriever after 22
我将 year_2015 变量和 N 变量都作为因子,并尝试将 year_2015 级别设置为“之前”然后“之后”。
如上所述,我想按 n 的升序在 Bars 中为“Before”和“After”点绘制不同的设备。为此,我最初尝试过:
F_dev_dec %>%
ggplot(aes(x= year_2015, fill= device_type)) +
geom_bar(position = position_dodge()) +
labs(title = NULL,
x= NULL,
y= "Count (n)")
这给了我这个图表:[1]:https://i.stack.imgur.com/NAM8i.png
不确定为什么它有正确的组(“之前”,“之后”,但所有设备子组都变为 1,就像它计算一些奇数百分比一样。我
接下来我尝试调整代码,而不是汇总,也不按设备和 year_2015 对数据表进行双重分组:
F_dev_dec <- FDA_co_tier%>%
select(device_type, year_approved) %>%
mutate(year_2015 = if_else(year_approved >= 2015, "after", "before")) %>%
mutate(year_2015 = factor(year_2015, levels=c("before", "after"))) %>%
group_by(device_type, year_2015)
然后对上面的 ggplot 使用相同的代码,我得到了一些更接近的东西,但不是按子组的 n 升序排列:https://i.stack.imgur.com/wSm5L.png
经过进一步尝试和错误没有得到这个,我能够让情节看起来像我想要的唯一方法是使用这段代码:
F_dev_dec <- FDA_co_tier%>%
select(device_type, year_approved) %>%
mutate(year_2015 = if_else(year_approved >= 2015, "before", "after")) %>%
mutate(year_2015 = factor(year_2015, levels=c("before", "after"))) %>%
group_by(device_type, year_2015) %>%
summarise(N=n())
`summarise()` has grouped output by 'device_type'. You can override using the `.groups` argument.
# A tibble: 9 x 3
# Groups: device_type [6]
device_type year_2015 N
<chr> <fct> <int>
1 Accessories after 6
2 Aspiration_catheter before 4
3 Aspiration_catheter after 32
4 Guidewire before 3
5 Guidewire after 23
6 Microcatheter after 7
7 Sheath after 19
8 Stentretriever before 17
9 Stentretriever after 22
F_dev_dec %>%
ggplot(aes(x= year_2015, y= N, fill= reorder(device_type, N))) +
geom_bar(data=F_dev_dec %>% filter(year_2015 == "before"), width=0.9, position = position_dodge(), stat = "identity") +
geom_bar(data=F_dev_dec %>% filter(year_2015 == "after"), width=0.5, position = position_dodge(), stat = "identity") +
scale_x_discrete(labels = c("Before", "After")) +
theme_classic()+
labs(title = NULL,
x= NULL,
y= "Count (n)")
这给出了我正在寻找的情节:https://i.stack.imgur.com/KHfzk.png
注意:在上面的代码中,FDA_co_tier 生成变量 year_2015 的突变不断弄乱最终的情节。当我尝试使用 mutate(year_2015 = if_else(year_approved >= 2015, "after", "before")) 正确进行突变时,最终的情节如下所示:https://i.stack.imgur.com/G4vyU.png
数据表被反转(应该“之前”的值被标记为“2015 年之后”,而“之后”的值被标记为“之前”)。更烦人的是,组中的任何内容都仍然包含相同的值,但标签是错误的,所以我不得不在scale_x_discrete(labels = c("Before", "After")) 行中写下以更正情节。
任何关于如何通过正确的升序获得子组以及生成绘图的代码的问题的建议将不胜感激!
【问题讨论】:
-
如果您创建一个可重现的小示例,会更容易提供帮助。阅读how to give a reproducible example。
标签: r plot tidyverse bar-chart grouping