使用ggplot2绘制两个变量 - 相同的x轴

5

我有两张图表使用相同的X轴-在它们两个中,X的范围都是0-5。 我想将它们合并成一张图表,但我没有找到先前的示例。 这是我得到的:

c <- ggplot(survey, aes(often_post,often_privacy)) + stat_smooth(method="loess")
c <- ggplot(survey, aes(frequent_read,often_privacy)) + stat_smooth(method="loess")

我该如何将它们合并呢?y轴是“通常隐私”,而每个图表中的x轴是“通常发布”或“频繁阅读”。我认为可以很容易地将它们合并(以某种方式),因为它们都在0-5范围内。谢谢!

2
这很容易通过重塑(reshape2::melt),然后使用美学,如颜色(或简单的分组)来区分两个变量。你需要以这样的方式melt,以便将often_privacy保留为id变量。如果您发布数据的一个小子集(使用dput),我相信您会得到答案。 - Ben Bolker
3个回答

10

Ben的解决方案的示例代码。

#Sample data
survey <- data.frame(
  often_post = runif(10, 0, 5), 
  frequent_read = 5 * rbeta(10, 1, 1), 
  often_privacy = sample(10, replace = TRUE)
)
#Reshape the data frame
survey2 <- melt(survey, measure.vars = c("often_post", "frequent_read"))
#Plot using colour as an aesthetic to distinguish lines
(p <- ggplot(survey2, aes(value, often_privacy, colour = variable)) + 
  geom_point() +
  geom_smooth()
)

4
您可以使用+来将其他绘图组合到同一个ggplot对象中。例如,要为两列数据对绘制点和平滑线:
ggplot(survey, aes(often_post,often_privacy)) + 
geom_point() +
geom_smooth() + 
geom_point(aes(frequent_read,often_privacy)) + 
geom_smooth(aes(frequent_read,often_privacy))

4
这个回答很好地回答了问题,虽然我认为我上面的评论提供了更“惯用”的方法(其中包括(1)自动图例(2)更紧凑的代码[尽管对于只有两个变量的情况,没有太大的优势])。 - Ben Bolker

0

试试这个:

df <- data.frame(x=x_var, y=y1_var, type='y1') 
df <- rbind(df, data.frame(x=x_var, y=y2_var, type='y2'))
ggplot(df, aes(x, y, group=type, col=type)) + geom_line()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接