R語言數據可視化tidyr與ggplot2多個變量分層展示舉例實現

在R語言普通的繪圖中,使用par()參數可以在一張圖上實現不同變量的子圖。如果我們想要用ggplot2實現,則需要整理我們的原始數據,這通常是非常麻煩的,這時就需要用到我們的tidyr來幫助我們繪圖。

可能說上面一段話不是很容易理解,下面我們來舉個栗子。

每個變量的密度分佈情況

y1 <- rnorm(20)
y2 <- rnorm(20)
dat <- data.frame(y1, y2)

現有的數據集:

            y1          y2
1  -0.12781723 -2.39376880
2   0.50074083  0.72555237
3  -0.02419456  0.94721701
4  -0.26366759 -0.60006759
5   1.13042618 -0.07591046
6   0.04313160  1.18677742
7   0.01180343  0.17627700
8   0.15208821 -0.12472391
9  -0.72690758 -1.92233170
10  1.04903577 -0.66208974
11  0.89689082  0.16331929
12  0.28471495  2.00629127
13 -0.26956768 -0.11897779
14 -0.81699454 -1.05575302
15 -0.65923768  1.20971004
16  0.18237270  1.55745467
17 -0.52359358 -0.74253496
18  1.36949647  1.07759474
19 -0.39882438  0.83915414
20  0.92084949 -1.04859906

目標繪圖:

思考

我們要如何利用ggplot達到上圖的效果?

需要用數據集,將y1與y2分別整理到一個新的變量上,叫做var

裡面所有的值也變成一個新的變量,叫做value

如果隻有兩個變量整理起來還比較簡單,但如果變量一旦增多,整理起來相對就較為繁瑣。所以這裡推薦使用tidyr包來進行整理。

其用起來也非常簡單。

tidyr

使用如下代碼,我們就可以整理成想要的結果:

dat %>%
  gather(y1, y2, key = "var", value = "value")

解釋一下上述代碼的含義:y1, y2表示原本數據中的變量;key = "var" 表示轉換之後,變量所在的那一列的名稱為var;value = "value"表示轉換之後,原本的值所在的那一列的名稱為value

輸出結果如下:

   var       value
1   y1 -0.12781723
2   y1  0.50074083
3   y1 -0.02419456
4   y1 -0.26366759
5   y1  1.13042618
6   y1  0.04313160
7   y1  0.01180343
8   y1  0.15208821
9   y1 -0.72690758
10  y1  1.04903577
11  y1  0.89689082
12  y1  0.28471495
13  y1 -0.26956768
14  y1 -0.81699454
15  y1 -0.65923768
16  y1  0.18237270
17  y1 -0.52359358
18  y1  1.36949647
19  y1 -0.39882438
20  y1  0.92084949
21  y2 -2.39376880
22  y2  0.72555237
23  y2  0.94721701
24  y2 -0.60006759
25  y2 -0.07591046
26  y2  1.18677742
27  y2  0.17627700
28  y2 -0.12472391
29  y2 -1.92233170
30  y2 -0.66208974
31  y2  0.16331929
32  y2  2.00629127
33  y2 -0.11897779
34  y2 -1.05575302
35  y2  1.20971004
36  y2  1.55745467
37  y2 -0.74253496
38  y2  1.07759474
39  y2  0.83915414
40  y2 -1.04859906

用瞭上述結果,就可以非常簡單地使用ggplot2進行畫圖瞭。

ggplot2進行繪圖

我們可以直接使用管道數據的處理方式進行繪圖,簡便快捷:

dat %>%
  gather(y1, y2, key = "var", value = "value") %>%
  ggplot(aes(x = value)) + 
  geom_histogram(aes(fill = factor(var), y = ..density..),
                 alpha = 0.3, colour = 'black') +
  stat_density(geom = 'line', position = 'identity', size = 1.5,
               aes(colour = factor(var))) +
  facet_wrap(~ var, ncol = 2) + 
  labs(y = '直方圖與密度曲線', x = '值',
       title = '標題', fill = '變量') +
  theme(plot.title = element_text(hjust = 0.5)) +
  guides(color = FALSE)

這裡基本都是前面的博客:R語言學習ggplot2繪制統計圖形包全面詳解 裡面有提及到。

隻有一個就是guides(color = FALSE),表示隱藏線顏色的圖例,因為線的顏色我們是用color =來指定的。同理如果要隱藏柱狀圖顏色的圖例則使用 guides(fill = FALSE)即可。

最終就可以得到我們的目標繪圖瞭!

以上就是R語言可視化tidyr與ggplot2多個變量分層展示舉例實現的詳細內容,更多關於R語言可視化tidyr與ggplot2多個變量分層的資料請關註WalkonNet其它相關文章!

推薦閱讀: