提问人:Fabio Giacomelli 提问时间:11/11/2023 最后编辑:Fabio Giacomelli 更新时间:11/11/2023 访问量:80
为什么我的 Y 值远高于 100%,即使我的最高值是 63%
Why are my Y values much higher than 100% even though my highest value is 63%
问:
我正在尝试使用 ggplot2 builder 绘制图形。我的图表中 X 的物种 (Sp.) 和 Y 的百分比 (Cover),梯度作为组,站点作为分面。但是,我的图形在 Y 轴上给我的值为 400。
这是我的 df 结构:
> data.frame': 720 obs. of 6 variables:
> Site : Factor w/ 2 levels "DRP","PSP": 2 2 2 2 2 2 2 2 2 2 ...
> Plot_ID : int 1 2 3 4 5 6 7 8 9 10 ...
> Gradient: Factor w/ 3 levels "Low","Medium",..: 3 3 3 3 3 3 3 3 3 3 ...
> Sp. : Factor w/ 4 levels "AG","FA","SN",..: 2 2 2 2 2 2 2 2 2 2 ...
> P.A : int 1 1 1 1 1 1 1 1 1 1 ...
> Cover : int 16 36 16 36 36 63 16 36 36 36 ...
这是我的 df 表:
Site Plot_ID Gradient Sp. P.A Cover G2 Percentage
> 1 PSP 1 High FA 1 16 3 0.16
> 2 PSP 2 High FA 1 36 3 0.36
> 3 PSP 3 High FA 1 16 3 0.16
> 4 PSP 4 High FA 1 36 3 0.36
> 5 PSP 5 High FA 1 36 3 0.36
> 6 PSP 6 High FA 1 63 3 0.63
数据集示例:
Site Plot_ID Gradient Sp. P/A Cover
PSP 1 High FA 1 16
DRP 1 Medium FA 0 0
PSP 1 High AG 1 16
DRP 1 Medium AG 0 0
PSP 1 High SS 0 0
DRP 1 Medium SS 0 0
PSP 1 High SN 1 16
DRP 1 Medium SN 0 0
PSP 2 High FA 1 36
DRP 2 Medium FA 0 0
PSP 2 High AG 0 0
DRP 2 Medium AG 1 3
PSP 2 High SS 0 0
DRP 2 Medium SS 0 0
PSP 2 High SN 0 0
DRP 2 Medium SN 0 0
PSP 3 High FA 1 16
DRP 3 High FA 1 1
PSP 3 High AG 1 16
DRP 3 High AG 1 36
PSP 3 High SS 0 0
DRP 3 High SS 0 0
PSP 3 High SN 0 0
DRP 3 High SN 0 0
PSP 4 High FA 1 36
DRP 4 High FA 1 16
PSP 4 High AG 0 0
DRP 4 High AG 1 1
PSP 4 High SS 0 0
DRP 4 High SS 1 16
PSP 4 High SN 0 0
DRP 4 High SN 1 16
PSP 5 High FA 1 36
DRP 5 Medium FA 0 0
PSP 5 High AG 0 0
DRP 5 Medium AG 0 0
PSP 5 High SS 0 0
DRP 5 Medium SS 0 0
PSP 5 High SN 0 0
这是ggplot给我的代码:
ggplot(df) +
aes(
x = Sp.,
fill = Gradient,
group = Gradient,
weight = Cover
) +
geom_bar(position = "dodge") +
scale_fill_brewer(palette = "Greys", direction = 1) +
theme_bw() +
facet_wrap(vars(Site))
这是结果图。如您所见,Y 轴显示 400,但我的最高覆盖率是 63%。
对我来说,Y 有 400 是没有意义的。从表头可以看出,我尝试将覆盖率除以 100(正如另一篇文章中所建议的那样),但唯一改变的是 Y 轴更高的级别不是 400,而是 4。
我还希望在图表中有误差线。
答:
0赞
Axeman
11/11/2023
#1
我认为您想要这样的东西,您正在绘制每个类别的平均值 +- CI。
ggplot(df, aes(Sp., Cover, fill = factor(Gradient))) +
stat_summary(fun = mean, geom = 'bar', position = 'dodge') +
stat_summary(
fun.data = 'mean_cl_boot', geom = 'errorbar',
position = position_dodge(width = 0.9), width = 0.2
)
评论
0赞
Fabio Giacomelli
11/11/2023
几乎。P/A 是每个物种的存在/不存在 (0,1) 数据。我想绘制的是最后一列的 % 覆盖率。.
0赞
Axeman
11/11/2023
好的,只需用 then..`P/A`
Cover
0赞
Fabio Giacomelli
11/11/2023
我已经尝试过了,但它仍然给了我奇怪的 Y 值。
0赞
Axeman
11/11/2023
说他们很奇怪对我没有帮助。您至少可以尝试解释一下与您的期望不同吗?请参见编辑 的绘图。Cover
0赞
Fabio Giacomelli
11/11/2023
我不知道如何发布剧情的图片。但基本上它给了我 0-12 的 Y 值,我不知道如何解释。
上一个:在 y 上绘制随机数,x 是范围
评论
geom_bar
weight=Cover
Cover
dput
Percentage
ggplot(df, aes(Sp., Percentage, fill = Gradient)) + stat_summary(fun = mean, geom = 'bar') + stat_summary(fun.data = 'mean.cl.boot', geom = 'errorbar')