2012-06-28 180 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

相關問題