協作閣

開源協作部落格

ggplot練習

Don / 2020-05-07 /


最近由於需要把資料視覺化,因此就想說來順便練習使用R跟ggplot。

我的資料是PTT婚姻版上,分類出高影響力和低影響力的作者後,想看這兩類群體的代名詞數量是否有差異。

先用點圖來呈現,可以看到在低影響力的群體中比較離散。但是兩邊的資料幾乎都擠在一起,根本看不出實際的分布狀況。

ggplot(df, aes(高影響力, 代名詞2_sum)) + 
    geom_point() + 
    theme(text = element_text(family = "Heiti TC Light")) +
    scale_x_discrete(labels=c("FALSE" = "low-influence", "TRUE" = "high-influence")) + 
    xlab(NULL)

所以再用box plot來看一下,可以看到高影響力的群體中,使用第二人稱的數量的確平均來說比較高。

ggplot(df, aes(高影響力, 代名詞2_sum)) + 
    geom_boxplot() + 
    theme(text = element_text(family = "Heiti TC Light")) +
    scale_x_discrete(labels=c("FALSE" = "low-influence", "TRUE" = "high-influence")) + 
    xlab(NULL)

最後是有在別的地方看到,有些人會在點圖的基礎上,幫兩邊的平均值連線,畫出一條直線,能比較直觀的呈現相關走勢。這是我這次學到的地方,使用stat_summary()的組合。

要畫出兩群資料中的平均值(圖中的紅點),只要輸入+ stat_summary(fun=mean, color="red", geom="point")就可以。而我遇到的困難是要將兩個紅點連線,一開始我是用 + stat_summary(fun=mean, color="red", geom="line"),但完全沒有跑出直線,後來上網找到答案,要加一個constant group mapping,也就是下面程式碼中aes(group = 0)的部分,才會work。

ggplot(df, aes(高影響力, 代名詞2_sum)) + 
    geom_point() + 
    stat_summary(fun=mean, aes(group = 0), colour="red", geom="line") + 
    stat_summary(fun=mean, colour="red", geom="point") + theme(text = element_text(family = "Heiti TC Light")) +
    scale_x_discrete(labels=c("FALSE" = "low-influence", "TRUE" = "high-influence")) + 
    xlab(NULL)

其實到底為什麼會這樣,我還沒理解,我先附上我找到的教學:ggplot2: aes(group = …) overrides default grouping