为什么我的 R 图没有显示完整的 y 轴?

问题描述 投票:0回答:1

我正在尝试生成 geom_point() 图,但是当我运行代码时,它会将 y 轴折叠成应有的一小部分。

我正在使用我的教授提供给我的一组代码。

ggplot() + 
 geom_point(data=data.scores,aes(x=NMDS1,y=NMDS2,colour=grp, size = SpDiv)) +
 geom_text(data=data.scores,aes(x=NMDS1,y=NMDS2,label=Stations),size=6,vjust=0) +
 scale_size(range = c(.1, 24), name="Species Diversity")+
 coord_equal() +
 theme_bw()

但是当我运行这个时,生成的图看起来像所附的图。Squished y-axis plot

使用类似的代码,他能够生成如下图。Somewhat normal plot

我尝试添加另一行代码来强制 y 轴更长:

scale_y_continuous(name="NMDS2", limit=c(0.1,24))
但这导致了这样的结果: Squished x-axis plot

这是怎么回事,我该如何解决?这不是我自己的代码,所以我没有从头开始编写它,并且有些元素对我来说完全陌生,所以我不知道这是否是我完全忽略的东西。

r ggplot2 plot
1个回答
0
投票

如评论中所述,您的轴不稳定,因为

coord_equal
设置强制轴使用相同的单位。由于您的图表的宽度远大于高度,这会导致它被压扁,而您教授的数据分布更广泛。然而,如果轴不相等,NMDS 图可能会产生误导,因此删除它并不是最佳选择。考虑旋转数据,使它们占据对角线而不是单个轴。

set.seed(123)
library(vegan)
v <- c(rnorm(18), rnorm(18)+2) |>
  matrix(ncol = 6) |>
  metaMDS(autotransform = FALSE, distance = "euclidean")

初始数据又长又瘦,正如您所拥有的:

library(ggplot2)
ggplot(v$points) +
  geom_point(aes(x=MDS1, y=MDS2)) +
  coord_equal()

enter image description here

通过乘以旋转矩阵旋转45度:

rot_mat <- matrix(c(sqrt(2)/2, sqrt(2)/2, -sqrt(2)/2, sqrt(2)/2), ncol=2)

v$points%*%rot_mat |>
  as.data.frame() |>
  setNames(c("MDS1", "MDS2")) |>
  ggplot() +
  geom_point(aes(x=MDS1, y=MDS2)) +
  coord_equal()

enter image description here

并且该图变得更容易解释。

或者,考虑您可以从 NMDS 中删除一些维度,而不会丢失太多信息 - 也许您只需要一个维度来实现足够的分离,而不是目前使用的 2+ 个维度。然后您就可以使用

geom_density
之类的东西来绘制数据。

set.seed(123)
v <- c(rnorm(18), rnorm(18)+2) |>
  matrix(ncol = 6) |>
  t() |>
  metaMDS(autotransform = FALSE, distance = "euclidean", k = 1)
ggplot(v$points) +
  geom_density(aes(x=MDS1, color=rep(c("A", "B"), each=3)))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.