我希望在 R 中创建一个条形图,结合来自 2 个不同数据帧的数据并使用第三个变量作为填充。
数据:
all_spp <- data.frame(NAME=c("A", "B", "C", "D"), spp=c(9, 5, 8, 6), cat=c("I", "II", "III", "IV") )
listed_spp <- data.frame(NAME=c("A", "B", "C", "D"), en_spp=c(1, 3, 2, 3) )
数据描述了保护区 (
NAME
)、物种总数 (spp
) 与濒危物种 (en_spp
) 以及保护区的保护级别 (cat
)。我正在尝试创建一个条形图,描绘保护区 (x=spp
) 的物种总数 (y=NAME
),并在相应的保护级别 (fill=cat
) 填充中着色。在每个区域的每个条形的顶部,我想将濒危物种 (x=en_spp
) 显示为散列条形。
我尝试组合两个数据框并使用
melt
函数,但是,这不允许我使用 fill=cat
,也没有添加相应的正确图例。
这是我一直在尝试使用但不起作用的代码
ggplot(data=all_spp, aes(x = spp, y = reorder(NAME, spp), fill=cat),) +
geom_bar(stat = "identity", position="stack") +
geom_bar(listed_spp, mapping=aes(x=en_spp, y=reorder(NAME, en_spp))) +
scale_x_continuous(limits = c(0,10), expand = c(0, 0)) +
theme_bw() +
theme(axis.text.y=element_text(size=18)) +
scale_fill_manual(breaks=c("I", "II", "III", "IV"),
values = c("I" = "#004B57",
"II" ="#007AA2",
"III" = "#008DC0",
"IV" = "#009DCF"))
任何解决方案的想法将不胜感激。
您可以使用
ggpattern
包来执行此操作。它很像这个答案,但对两个不同的数据集进行了调整。
library(ggpattern)
library(ggplot2)
all_spp <- data.frame(NAME=c("A", "B", "C", "D"), spp=c(9, 5, 8, 6), cat=c("I", "II", "III", "IV") )
listed_spp <- data.frame(NAME=c("A", "B", "C", "D"), en_spp=c(1, 3, 2, 3) )
ggplot(data = all_spp, aes(x = spp, y = reorder(NAME, spp), fill = cat)) +
geom_bar(stat="identity") +
geom_bar_pattern(data=listed_spp, aes(y=NAME, x=en_spp, pattern = "Endangered"),
stat="identity",
alpha=0,
color = "black",
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.1,
pattern_spacing = 0.025,
pattern_key_scale_factor = 0.6, inherit.aes=FALSE) +
labs(pattern = "", y="Name", x="# Species") +
scale_x_continuous(limits = c(0,10), expand = c(0, 0)) +
theme_bw() +
theme(axis.text.y=element_text(size=18)) +
scale_fill_manual(breaks=c("I", "II", "III", "IV"),
values = c("I" = "#004B57",
"II" ="#007AA2",
"III" = "#008DC0",
"IV" = "#009DCF"))
创建于 2024-02-02,使用 reprex v2.0.2