首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >百分比叠加条形图:从Excel到R中的ggplot2

百分比叠加条形图:从Excel到R中的ggplot2
EN

Stack Overflow用户
提问于 2022-11-21 09:37:51
回答 1查看 26关注 0票数 0

我的问题很简单。我试图在ggplot2中创建一个百分比叠加条形图。因为我已经在Excel中创建了相同的图表,但我不知道如何在R中获得相同的图,所以我很清楚自己想要的是什么样子。

我的问题是,我的代码中的“填充”对应两组数据:我的x轴是嵌套框数,我的y轴是一个百分比(0%-100%),填充应该分为雄性和雌性(例如,在巢箱号5(b)中有3种寄生虫,2种雌性和1种雄性,因此该列应该划分为67% FF和33% MM)。

这是我的数据集:

代码语言:javascript
复制
> dput(broods_2020)
structure(list(`Age.(days)` = c("7-10 days", "15-20 days", "5-7 
days", 
"5-7 days", "5-7 days", "15-20 days", "6-8 days", "5-7 days", 
"13-15 days", "10-12 days", "7-10 days", "8-10 days", "5-7 days", 
"8-10 days", "20-25 days", "7-10 days", "8-10 days", "10-12 days", 
"15-20 days", "15-20 days", "10-12 days", "12-15 days"), `Nest- 
box.number.(x.brood)` = c(" 5 (a)", 
"5 (b)", "7", "10", "11 (a)", "12", "27", "31", "37 (a)", "40", 
"41", "200", "202", "205", "1 west", "5 west", "A3", "B7", "B8", 
"B11", "C18", "C21"), `N.(Carnus)` = c(4, 3, 13, 36, 10, 8, 8, 
17, 6, 3, 13, 8, 8, 9, 5, 10, 22, 28, 8, 8, 1, 3), MM = c(2, 
1, 5, 13, 5, 3, 2, 8, 2, 2, 5, 4, 3, 4, 3, 5, 10, 9, 1, 3, 1, 
1), FF = c(2, 2, 8, 23, 5, 5, 6, 9, 4, 1, 8, 4, 5, 5, 2, 5, 12, 
19, 7, 5, 0, 2)), row.names = c(NA, 22L), class = "data.frame")

这是我的密码:

代码语言:javascript
复制
ggplot(broods_2020, aes(x=broods_2020$"Nest-box.number.(x.brood)",y=broods_2020$"MM",broods_2020$"FF",fill=broods_2020$"N.(Carnus)",)) + geom_col() +
  geom_bar(position="fill", stat="identity") +
  geom_bar(fill="#290DFB","#FF0000") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) 
+
  xlab("Nest box") + ylab("Collected Carnus hemapterus (%)") +
  ggtitle("2020 - PARASITE SEX RATIO (per brood)") +
  theme(axis.line.x = element_line(colour = 'black', size=0.5, 
linetype='solid'),
        axis.line.y = element_line(colour = 'black', size=0.5, 
linetype='solid')) +
  theme(title = element_text(face="plain", size = 12)) +
  theme(plot.title = element_text(hjust = 0.5, vjust =2)) +
  theme(axis.text.x = element_text(angle = 45, hjust=1)) +
  theme(panel.background = element_blank()) 

我的数据集中有问题吗?我如何创建这个图表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-21 11:14:51

这更接近你要找的东西吗?

如果涉及几个步骤:

  • pivot_widersex设为一个变量,将n设为另一个变量--这允许您设置一个颜色来表示每个sex
  • n作为y值传递给aessex作为fill value
  • geom_col(position = "fill"),然后为每个x值(Nest-box.number.(x.brood))
  • You填充高达100%的栏,而每个x值(Nest-box.number.(x.brood))
  • You只需要一个geom_层即可--geom_bar不是needed
  • Setting填充颜色,而是匹配MMscale_fill_manual(values = ...)

中完成了FF

代码语言:javascript
复制
library(ggplot2)
library(tidyr)


broods_2020 |>
  pivot_longer(c(MM, FF), names_to = "sex", values_to = "n") |>
  ggplot(aes(x = `Nest-box.number.(x.brood)`, y = n, fill = sex)) + 
  geom_col(position = "fill") +
  scale_fill_manual("Sex", values = c("MM" = "#290DFB", "FF" = "#FF0000")) +
  scale_y_continuous("Percent", labels = scales::percent_format(accuracy = 1)) +
  xlab("Nest box") + ylab("Collected Carnus hemapterus (%)") +
  ggtitle("2020 - PARASITE SEX RATIO (per brood)") +
  theme(
    axis.line.x = element_line(
      colour = 'black',
      size = 0.5,
      linetype = 'solid'
    ),
    axis.line.y = element_line(
      colour = 'black',
      size = 0.5,
      linetype = 'solid'
    )
  ) +
  theme(title = element_text(face = "plain", size = 12)) +
  theme(plot.title = element_text(hjust = 0.5, vjust = 2)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  theme(panel.background = element_blank()) 

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74516849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档