为什么我的 Y 值远高于 100%,即使我的最高值是 63%

Why are my Y values much higher than 100% even though my highest value is 63%

提问人:Fabio Giacomelli 提问时间:11/11/2023 最后编辑:Fabio Giacomelli 更新时间:11/11/2023 访问量:80

问:

我正在尝试使用 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%。

grob

对我来说,Y 有 400 是没有意义的。从表头可以看出,我尝试将覆盖率除以 100(正如另一篇文章中所建议的那样),但唯一改变的是 Y 轴更高的级别不是 400,而是 4。

我还希望在图表中有误差线。

r ggplot2 绘制 yaxis

评论

0赞 Azor Ahai -him- 11/11/2023
y 轴标签说什么?
3赞 stefan 11/11/2023
A 将为您提供计数,即观测值的数量。对于每个 obs.,按 的值加权,例如,对于 6 个 obs.,在您的示例数据中,您将得到一个高度为 2 * 16 + 3 * 36 + 63 = 203 的柱线。geom_barweight=CoverCover
0赞 Axeman 11/11/2023
1) 你能使你的示例可重复吗,例如通过使用提供一些示例数据?2)这些是计数,而不是估计值,那么这些误差线会显示什么?3)您不是在绘制列,而只是在绘制观测值的计数。dputPercentage
1赞 Axeman 11/11/2023
也许你想要类似的东西ggplot(df, aes(Sp., Percentage, fill = Gradient)) + stat_summary(fun = mean, geom = 'bar') + stat_summary(fun.data = 'mean.cl.boot', geom = 'errorbar')
0赞 Fabio Giacomelli 11/11/2023
@Axeman我在上面添加了一个小样本(不是最好的,但这是我可以管理的)。我想绘制的是每个物种的覆盖百分比,以梯度为组,以位点为刻面。因此,我可以看到每个梯度中各物种覆盖率的差异。

答:

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
  )

enter image description here

评论

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 值,我不知道如何解释。