我的问题很简单。我试图在ggplot2中创建一个百分比叠加条形图。因为我已经在Excel中创建了相同的图表,但我不知道如何在R中获得相同的图,所以我很清楚自己想要的是什么样子。
我的问题是,我的代码中的“填充”对应两组数据:我的x轴是嵌套框数,我的y轴是一个百分比(0%-100%),填充应该分为雄性和雌性(例如,在巢箱号5(b)中有3种寄生虫,2种雌性和1种雄性,因此该列应该划分为67% FF和33% MM)。
这是我的数据集:
> 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")这是我的密码:
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()) 我的数据集中有问题吗?我如何创建这个图表?
发布于 2022-11-21 11:14:51
这更接近你要找的东西吗?
如果涉及几个步骤:
pivot_wider将sex设为一个变量,将n设为另一个变量--这允许您设置一个颜色来表示每个sexn作为y值传递给aes,sex作为fill valuegeom_col(position = "fill"),然后为每个x值(Nest-box.number.(x.brood))x值(Nest-box.number.(x.brood))geom_层即可--geom_bar不是neededMM在scale_fill_manual(values = ...)中完成了FF
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())

https://stackoverflow.com/questions/74516849
复制相似问题