R:一个变量与其余变量的配对图
R: pairs plot of one variable with the rest of the variables
我想用我的 "True" 变量对和所有其他变量(人变量)生成一个相关图。我很确定有人在某个地方提出过这个问题,但我发现的解决方案对我不起作用。
library(ggplot2)
set.seed(0)
dt = data.frame(matrix(rnorm(120, 100, 5), ncol = 6) )
colnames(dt) = c('Salary', paste0('People', 1:5))
ggplot(dt, aes(x=Salary, y=value)) +
geom_point() +
facet_grid(.~Salary)
哪里出现错误:错误:列 y
必须是一维原子向量或列表。
我知道其中一个解决方案是写出 y 中的所有变量——我试图避免这种情况,因为我的真实数据有 15 列。
此外,我不完全确定 "value"、"variables" 在 ggplot 中指的是什么。我在演示代码时看到了很多。
如有任何建议,我们将不胜感激!
您需要先 stack()
您的数据,可能这就是您所拥有的 "seen"。
dt <- setNames(stack(dt), c("value", "Salary"))
library(ggplot2)
ggplot(dt, aes(x=Salary, y=value)) +
geom_point() +
facet_grid(.~Salary)
产量
您想使用 tidyr::gather()
将数据从 wide
格式转换为 long
格式。这是使用 tidyverse
框架
中的包的解决方案
library(tidyr)
library(ggplot2)
theme_set(theme_bw(base_size = 14))
set.seed(0)
dt = data.frame(matrix(rnorm(120, 100, 5), ncol = 6) )
colnames(dt) = c('Salary', paste0('People', 1:5))
### convert data frame from wide to long format
dt_long <- gather(dt, key, value, -Salary)
head(dt_long)
#> Salary key value
#> 1 106.31477 People1 98.87866
#> 2 98.36883 People1 101.88698
#> 3 106.64900 People1 100.66668
#> 4 106.36215 People1 104.02095
#> 5 102.07321 People1 99.71447
#> 6 92.30025 People1 102.51804
### plot
ggplot(dt_long, aes(x = Salary, y = value)) +
geom_point() +
facet_grid(. ~ key)
### if you want to add regression lines
library(ggpmisc)
# define regression formula
formula1 <- y ~ x
ggplot(dt_long, aes(x = Salary, y = value)) +
geom_point() +
facet_grid(. ~ key) +
geom_smooth(method = 'lm', se = TRUE) +
stat_poly_eq(aes(label = paste(..eq.label.., ..rr.label.., sep = "~~")),
label.x.npc = "left", label.y.npc = "top",
formula = formula1, parse = TRUE, size = 3) +
coord_equal()
### if you also want ggpairs() from the GGally package
library(GGally)
ggpairs(dt)
由 reprex package (v0.2.1.9000)
创建于 2019-02-28
我想用我的 "True" 变量对和所有其他变量(人变量)生成一个相关图。我很确定有人在某个地方提出过这个问题,但我发现的解决方案对我不起作用。
library(ggplot2)
set.seed(0)
dt = data.frame(matrix(rnorm(120, 100, 5), ncol = 6) )
colnames(dt) = c('Salary', paste0('People', 1:5))
ggplot(dt, aes(x=Salary, y=value)) +
geom_point() +
facet_grid(.~Salary)
哪里出现错误:错误:列 y
必须是一维原子向量或列表。
我知道其中一个解决方案是写出 y 中的所有变量——我试图避免这种情况,因为我的真实数据有 15 列。
此外,我不完全确定 "value"、"variables" 在 ggplot 中指的是什么。我在演示代码时看到了很多。
如有任何建议,我们将不胜感激!
您需要先 stack()
您的数据,可能这就是您所拥有的 "seen"。
dt <- setNames(stack(dt), c("value", "Salary"))
library(ggplot2)
ggplot(dt, aes(x=Salary, y=value)) +
geom_point() +
facet_grid(.~Salary)
产量
您想使用 tidyr::gather()
将数据从 wide
格式转换为 long
格式。这是使用 tidyverse
框架
library(tidyr)
library(ggplot2)
theme_set(theme_bw(base_size = 14))
set.seed(0)
dt = data.frame(matrix(rnorm(120, 100, 5), ncol = 6) )
colnames(dt) = c('Salary', paste0('People', 1:5))
### convert data frame from wide to long format
dt_long <- gather(dt, key, value, -Salary)
head(dt_long)
#> Salary key value
#> 1 106.31477 People1 98.87866
#> 2 98.36883 People1 101.88698
#> 3 106.64900 People1 100.66668
#> 4 106.36215 People1 104.02095
#> 5 102.07321 People1 99.71447
#> 6 92.30025 People1 102.51804
### plot
ggplot(dt_long, aes(x = Salary, y = value)) +
geom_point() +
facet_grid(. ~ key)
### if you want to add regression lines
library(ggpmisc)
# define regression formula
formula1 <- y ~ x
ggplot(dt_long, aes(x = Salary, y = value)) +
geom_point() +
facet_grid(. ~ key) +
geom_smooth(method = 'lm', se = TRUE) +
stat_poly_eq(aes(label = paste(..eq.label.., ..rr.label.., sep = "~~")),
label.x.npc = "left", label.y.npc = "top",
formula = formula1, parse = TRUE, size = 3) +
coord_equal()
### if you also want ggpairs() from the GGally package
library(GGally)
ggpairs(dt)
由 reprex package (v0.2.1.9000)
创建于 2019-02-28