gpt4 book ai didi

r - 更改 ggplot 上的 geom_bar 宽度

转载 作者:行者123 更新时间:2023-12-01 19:34:34 25 4
gpt4 key购买 nike

我正在制作一个条形图,显示返回巢穴的不同类型猎物的百分比。

我的数据如下:

Prey <- c(rep("Bird", 12), rep("Lizard", 3), rep("Invertebrate", 406))  
Type <- c(rep("Unknown bird", 12), rep("Skink", 2), rep("Gecko", 1),
rep("Unknown Invertebrate", 170), rep("Beetle", 1),
rep("Caterpillar", 3), rep("Grasshopper", 3), rep("Huhu grub", 1),
rep("Moth", 34), rep("Praying mantis", 1), rep("Weta", 193))
Preydata <- data.frame(Prey,Type)

ggplot(Preydata, aes(x = Prey, y = (..count..)/sum(..count..))) +
scale_y_continuous(labels = percent_format()) +
geom_bar(aes(fill = Type), position = "dodge")

我的图表如下图所示。

enter image description here

我希望所有“类型”栏宽度相同,但是当我更改 geom_bar 下的宽度时它只会改变“猎物”栏的宽度。当我尝试使用以下内容时:

ggplot(Preydata, aes(x = as.numeric(interaction(Prey, Type)), 
y = (..count..)/sum(..count..))) +
scale_y_continuous(labels = percent_format()) +
geom_bar(aes(fill = Type), position = "dodge")

我的条不再按正确的顺序排列,或按“猎物”分组。我有什么办法可以改变这个吗? enter image description here

最佳答案

通过使用tableprop.table在绘图之前准备数据,可以确保所有可能包括 PreyType 的组合。这会强制条形具有相同的宽度,而不改变条形的顺序。

所以,这是另一种方法 using interactionbinding missing combinations已被标记为重复项。

Preydata2 <- as.data.frame(prop.table(table(Preydata$Prey, Preydata$Type)))
names(Preydata2) <- c("Prey", "Type", "Freq")

library(ggplot2)
library(scales)
ggplot(Preydata2, aes(x = Prey, y = Freq, fill = Type)) +
scale_y_continuous(labels = percent_format()) +
geom_col(position = "dodge")

产生

enter image description here

说明

table(Preydata$Prey, Preydata$Type) 创建 PreyType所有组合的列联表code>,甚至那些在底层数据中不出现的组合:



             Beetle Caterpillar Gecko Grasshopper Huhu grub Moth Praying mantis Skink Unknown bird
Bird 0 0 0 0 0 0 0 0 12
Invertebrate 1 3 0 3 1 34 1 0 0
Lizard 0 0 1 0 0 0 0 2 0

Unknown Invertebrate Weta
Bird 0 0
Invertebrate 170 193
Lizard 0 0

prop.table 将计数转换为分数。这相当于OP中的(..count..)/sum(..count..)

数据准备的最后一步是将表格转换为数据框(ggplot 所需的格式),并适本地重命名列。

绘图命令与OP类似,除了

  • 使用已经计算出的 Freq,而不是动态计算 (..count..)/sum(..count..)
  • fill 美学已移至对 ggplot() 的初始调用,
  • geom_col 用作 geom_bar(stat = "identity") 的简写(ggplot22.2.0 版本引入的新函数)).

关于r - 更改 ggplot 上的 geom_bar 宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com