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 创建
我正在尝试使用 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 创建