散点图中的重叠趋势线,R
Overlapping Trend Lines in scatterplots, R
我正在尝试使用 R 中的 geom_smooth() 叠加多条趋势线。我目前有这段代码。
ggplot(mtcars2, aes(x=Displacement, y = Variable, color = Variable))
+ geom_point(aes(x=mpg, y = hp, col = "Power"))
+ geom_point(aes(x=mpg, y = drat, col = "Drag Coef."))
(mtcars2是mtcars的规范化形式)
哪个给我这张图。
我正在尝试使用 geom_smooth(method='lm') 为两个变量绘制两条趋势线。有什么想法吗?
(奖励:如果可能的话,我还想实现 'shape=1' 参数来区分变量。以下方法不起作用)
geom_point(aes(x=mpg, y = hp, col = "Power", shape=2))
更新
我设法做到了。
ggplot(mtcars2, aes(x=Displacement, y = Variable, color = Variable))
+ geom_point(aes(x=disp, y = hp, col = "Power"))
+ geom_point(aes(x=disp, y = mpg, col = "MPG"))
+ geom_smooth(method= 'lm',aes(x=disp, y = hp, col = "Power"))
+ geom_smooth(method= 'lm',aes(x=disp, y = mpg, col = "MPG"))
看起来像这样。
但这是一段丑陋的代码。如果有人能让这段代码看起来更漂亮,那就太好了。另外,我还没有能够实现 'shape=2' 参数。
看起来你让生活变得比需要的更艰难......你可以将其他参数传递给 aes()
,例如 group
和 shape
。
我不知道我的规范化是否正确,但这应该足以让您朝着正确的方向前进:
library(ggplot2)
library(reshape2)
#Do some normalization
mtcars$disp_norm <- with(mtcars, (disp - min(disp)) / (max(disp) - min(disp)))
mtcars$hp_norm <- with(mtcars, (hp - min(hp)) / (max(hp) - min(hp)))
mtcars$drat_norm <- with(mtcars, (drat - min(drat)) / (max(drat) - min(drat)))
#Melt into long form
mtcars.m <- melt(mtcars, id.vars = "disp_norm", measure.vars = c("hp_norm", "drat_norm"))
#plot
ggplot(mtcars.m, aes(disp_norm, value, group = variable, colour = variable, shape = variable)) +
geom_point() +
geom_smooth(method = "lm")
产量:
我正在尝试使用 R 中的 geom_smooth() 叠加多条趋势线。我目前有这段代码。
ggplot(mtcars2, aes(x=Displacement, y = Variable, color = Variable))
+ geom_point(aes(x=mpg, y = hp, col = "Power"))
+ geom_point(aes(x=mpg, y = drat, col = "Drag Coef."))
(mtcars2是mtcars的规范化形式)
哪个给我这张图。
我正在尝试使用 geom_smooth(method='lm') 为两个变量绘制两条趋势线。有什么想法吗?
(奖励:如果可能的话,我还想实现 'shape=1' 参数来区分变量。以下方法不起作用)
geom_point(aes(x=mpg, y = hp, col = "Power", shape=2))
更新 我设法做到了。
ggplot(mtcars2, aes(x=Displacement, y = Variable, color = Variable))
+ geom_point(aes(x=disp, y = hp, col = "Power"))
+ geom_point(aes(x=disp, y = mpg, col = "MPG"))
+ geom_smooth(method= 'lm',aes(x=disp, y = hp, col = "Power"))
+ geom_smooth(method= 'lm',aes(x=disp, y = mpg, col = "MPG"))
看起来像这样。
但这是一段丑陋的代码。如果有人能让这段代码看起来更漂亮,那就太好了。另外,我还没有能够实现 'shape=2' 参数。
看起来你让生活变得比需要的更艰难......你可以将其他参数传递给 aes()
,例如 group
和 shape
。
我不知道我的规范化是否正确,但这应该足以让您朝着正确的方向前进:
library(ggplot2)
library(reshape2)
#Do some normalization
mtcars$disp_norm <- with(mtcars, (disp - min(disp)) / (max(disp) - min(disp)))
mtcars$hp_norm <- with(mtcars, (hp - min(hp)) / (max(hp) - min(hp)))
mtcars$drat_norm <- with(mtcars, (drat - min(drat)) / (max(drat) - min(drat)))
#Melt into long form
mtcars.m <- melt(mtcars, id.vars = "disp_norm", measure.vars = c("hp_norm", "drat_norm"))
#plot
ggplot(mtcars.m, aes(disp_norm, value, group = variable, colour = variable, shape = variable)) +
geom_point() +
geom_smooth(method = "lm")
产量: