2012-06-28 360 views
5

我有两个具有相同x轴的图 - 两个x轴的范围均为0-5。 我想将它们两个结合到一个图中,但我没有找到前面的例子。 以下是我得到的:使用ggplot2绘制两个变量 - 相同的x轴

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'),然后使用一种审美如颜色(或简称组)来区分很容易这两个变量。你需要''融化',以保持'frequently_privacy'为一个id变量。如果你发布了一小部分数据(用'dput'),我相信你会得到一个答案。 –

回答

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)更紧凑的代码[尽管只有两个变量没有大优势]) –

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() 
) 
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

相关问题