ggplot :X 轴上具有标准偏差的线图

ggplot : Line Plot with Standard Deviations on X Axis

我正在尝试使用 ggplot 创建一个图形,其中 X 轴是 X 变量的 +/-1 SD。我不确定这种图形叫什么或如何制作它。我用 SD 搜索了 ggplot 线图,但没有发现任何类似的东西。任何建议将不胜感激。

更新:

这是说明我现在所处位置的可重现代码:

library(tidyverse, ggplot2)
iris <- iris
iris <- iris %>% filter(Species == "virginica" | Species == "setosa")

ggplot(iris, aes(x=scale(Sepal.Length), y=Sepal.Width, group = Species, 
                       shape=Species, linetype=Species))+ 
  geom_line() + 
  labs(title="Iris Data Example",x="Sepal Length", y = "Sepal Width")+
  theme_bw()

我最初发布的图与这张图有两个主要区别:

A) 原图只有+1和-1 SD,而我的例子有-1、0+1和+2。

B) 原始图在 X 轴上的 Y 均值为 -1 和 +1 SD,而我的示例中到处都是数据点。

R 中的scale 函数减去平均值并将结果除以标准差,这样得到的变量可以解释为'number of standard deviations from the mean'。另见 wikipedia.

在 ggplot2 中,您可以在 aes() 函数中用 scale() 包装您想要的变量。

library(ggplot2)

ggplot(mpg, aes(scale(displ), cty)) +
  geom_point()

reprex package (v1.0.0)

于 2021-08-05 创建

编辑:

我似乎没有仔细阅读第一个数字的图例:似乎作者根据数据是否超过正标准差或负标准差对数据进行了分类。要以这种方式对数据进行分类,我们可以使用 cut 函数。然后我们可以使用比例尺的 limits 来排除 (-1, 1] bin 和 labels 参数来制作更漂亮的轴标签。

相对于你的例子,我已经改变了 x 和 y 的美学,否则其中一个物种在其中一个类别中没有任何观察结果。

library(tidyverse, ggplot2)
iris <- iris
iris <- iris %>% filter(Species == "virginica" | Species == "setosa")

ggplot(iris, 
       aes(x = cut(scale(Sepal.Width), breaks = c(-Inf, -1,1, Inf)), 
           y = Sepal.Length, group = Species, 
           shape = Species, linetype = Species))+ 
  geom_line(stat = "summary", fun = mean) + 
  scale_x_discrete(
    limits = c("(-Inf,-1]", "(1, Inf]"),
    labels = c("-1 SD", "+ 1SD")
  ) +
  labs(title="Iris Data Example",y="Sepal Length", x = "Sepal Width")+
  theme_bw()
#> Warning: Removed 73 rows containing non-finite values (stat_summary).

reprex package (v1.0.0)

于 2021-08-05 创建