R語(yǔ)言學(xué)習(xí)指南(2) ggplot2中的一些關(guān)鍵概念

美學(xué),幾何,映射,比例尺,都是什么?

本節(jié)主要向初學(xué)者簡(jiǎn)要介紹ggplot2中的一些關(guān)鍵概念

先看下面的代碼:

ggplot(celebs,aes(x = age, y = oscars)) +
  geom_point(size = 7,aes(color = gender)) +
  geom_text(aes(label = name))

乍一看,對(duì)于ggplot2的初學(xué)者來(lái)說(shuō),這似乎簡(jiǎn)直是胡言亂語(yǔ)。你可能猜測(cè)到ggplot是一個(gè)函數(shù),并且此代碼生成的可視化結(jié)果可能表示點(diǎn)和文本。但到底aes是什么或者geom_text或者size是什么意思?

Rplot.png

要在ggplot2中實(shí)現(xiàn)數(shù)據(jù)可視化,首先需要了解一些關(guān)鍵概念。一旦了解了它們,任何可視化都將變得更加容易。本節(jié)中我將不會(huì)創(chuàng)建精美的可視化圖,也不會(huì)創(chuàng)建有意義的可視化。但是,我們將學(xué)習(xí)一些重要的關(guān)鍵概念:美學(xué),映射,幾何和比例。將用大部分示例來(lái)幫助大家了解它們的含義

首先安裝tidyverse

install.packages("tidyverse")
library(tidyverse)

繼續(xù),將以下代碼粘貼到Rstudio的代碼編輯區(qū)。先無(wú)需知道代碼的工作原理,只需將其粘貼并查看它是否產(chǎn)生與以下相同的輸出

celebs <- tibble(
    name = c("Brad Pitt", "Daniel Day-Lewis", 
             "Tom Hanks", "Natalie Portman", 
             "Kate Winslet", "Cate Blanchett"),
    age  = c(56, 62, 63, 38, 44, 50),
    oscars = c(0, 3, 2, 1, 1, 2),
    gender = c("male", "male", "male", 
               "female", "female", "female")
  ) %>% 
  mutate(oscars = as.factor(oscars))
celebs
# A tibble: 6 x 4
  name               age oscars gender
  <chr>            <dbl> <fct>  <chr> 
1 Brad Pitt           56 0      male  
2 Daniel Day-Lewis    62 3      male  
3 Tom Hanks           63 2      male  
4 Natalie Portman     38 1      female
5 Kate Winslet        44 1      female
6 Cate Blanchett      50 2      female

根據(jù)創(chuàng)建的文件可以看到湯姆·漢克斯(Tom Hanks)今年63歲,贏得了兩次奧斯卡獎(jiǎng)。丹尼爾·戴·劉易斯贏得了三場(chǎng)。我們的主要問(wèn)題是,如何將這些數(shù)據(jù)轉(zhuǎn)換為可視化圖像?

什么是數(shù)據(jù)可視化?

在關(guān)注關(guān)鍵概念之前,我們應(yīng)該先花一點(diǎn)時(shí)間來(lái)思考我們需要解決的整體問(wèn)題。在數(shù)據(jù)可視化中,我們要可視化的數(shù)據(jù)(例如數(shù)字,文本)

可視化什么?就如同畫(huà)家通常在畫(huà)布上繪畫(huà),我們也是一樣。每個(gè)新畫(huà)布都是空的。作為畫(huà)家和數(shù)據(jù)可視化工程師,我們的工作都是填補(bǔ)畫(huà)布。但是,我們的畫(huà)布不是真實(shí)的東西,它是一種函數(shù)。我們將此函數(shù)稱為ggplot

ggplot()
ggplot.png

ggplot2中的每個(gè)數(shù)據(jù)可視化都從此函數(shù)開(kāi)始。該函數(shù)創(chuàng)建一個(gè)我們必須填充的灰色畫(huà)布。最終,我們添加到繪圖中的所有內(nèi)容都必須映射到實(shí)際數(shù)據(jù),從而實(shí)現(xiàn)數(shù)據(jù)可視化。如果我們像幼兒一樣在畫(huà)布上添加隨機(jī)點(diǎn),就不會(huì)稱之為數(shù)據(jù)可視化

先舉一個(gè)例子,說(shuō)明我們?nèi)绾巫龅竭@一點(diǎn):

湯姆·漢克斯(Tom Hanks)贏得了2項(xiàng)奧斯卡獎(jiǎng),他今年63歲。我們可以在畫(huà)布上添加一個(gè)圓或一個(gè)點(diǎn)。該點(diǎn)必須以某種方式映射到數(shù)據(jù)。這就是它的工作方式:


plot1.png

年齡顯示在x軸上,奧斯卡數(shù)顯示在y軸上。從這個(gè)意義上說(shuō),湯姆·漢克斯不過(guò)是二維空間中的一個(gè)點(diǎn),讓我們暫時(shí)忘記要點(diǎn)。湯姆·漢克斯(Tom Hanks)也可以只是二維空間中巧克力棒的圖像:


plot2.png

關(guān)鍵是,湯姆·漢克斯的在視覺(jué)上可以是任何東西。甚至只是一段文字。所以這是第一條規(guī)則

在數(shù)據(jù)可視化中,我們將數(shù)據(jù)可視化為幾何對(duì)象

我們已經(jīng)看到了兩個(gè)幾何對(duì)象,一個(gè)點(diǎn)和一個(gè)巧克力棒。
以下更全面的列表:

一個(gè)點(diǎn)
一個(gè)矩形
一條線
路徑(或連接的線)
一個(gè)地區(qū)

在二維空間中,每個(gè)這樣的幾何對(duì)象都需要一個(gè)x坐標(biāo)和一個(gè)y坐標(biāo)。我們的Tom Hanks巧克力棒必須放在畫(huà)布上的某個(gè)位置。實(shí)際位置會(huì)影響我們解釋數(shù)據(jù)可視化的結(jié)果。如果巧克力棒在左邊,Tom Hanks會(huì)比實(shí)際年齡年輕。因此,巧克力棒在空間中的位置與數(shù)據(jù)之間存在映射。我們稱這種映射為美學(xué)映射。每種美學(xué)映射都告訴我們有關(guān)幾何對(duì)象的一些可視化信息。下面介紹一個(gè)可視化例子:

ggplot(celebs,aes(x = age, y = oscars)) +
  geom_point(size = 7,aes(color =oscars)) +
  geom_text(aes(label = name))
plot3.png

在這個(gè)例子中,我們將一個(gè)點(diǎn)用作幾何對(duì)象。每個(gè)點(diǎn)都有三個(gè)美學(xué)映射。首先,通過(guò)x與y,2個(gè)值將每個(gè)點(diǎn)定位在二維空間中。其次,每個(gè)點(diǎn)的顏色都不同,具體取決于每個(gè)電影明星獲得的奧斯卡獎(jiǎng)。例如,丹尼爾·戴·劉易斯(Daniel Day-Lewis)贏得了三項(xiàng)奧斯卡獎(jiǎng)。數(shù)字三被映射為紫色。同樣,數(shù)字2(2項(xiàng)奧斯卡獎(jiǎng))被映射為青色。我們可以如下表示該映射:

年齡-> x
奧斯卡獎(jiǎng)數(shù)-> y
奧斯卡獎(jiǎng)數(shù)->顏色

ggplot中,定義此類(lèi)映射的函數(shù)為aes,在Rstudio中復(fù)制以下代碼

aes(x = age, 
    y = oscars,
    color = oscars)
Aesthetic mapping: 
* `x`      -> `age`
* `y`      -> `oscars`
* `colour` -> `oscars`

通過(guò)這種映射,每個(gè)幾何對(duì)象將根據(jù)每個(gè)電影明星的年齡和奧斯卡獎(jiǎng)的數(shù)量位于畫(huà)布相對(duì)位置。此外,每個(gè)幾何對(duì)象的顏色將映射到每個(gè)電影明星贏得的奧斯卡獎(jiǎng)的數(shù)量。這是我們的第二條規(guī)則

數(shù)據(jù)映射到應(yīng)用于幾何對(duì)象的美學(xué)映射

幾何對(duì)象、美學(xué)和映射之間的相互作用

現(xiàn)在我們知道,在使用ggplot2進(jìn)行數(shù)據(jù)可視化時(shí),我們先將美學(xué)映射到幾何對(duì)象。讓我們?cè)陔娪懊餍菙?shù)據(jù)集的幫助下了解這一想法。以下數(shù)據(jù)可視化表示散點(diǎn)圖,即點(diǎn)作為映射到二維空間上的幾何對(duì)象

ggplot(data = celebs, mapping = aes(x = age, y = oscars)) +
  geom_point()

ggplot是一個(gè)函數(shù),帶有兩個(gè)參數(shù)。第一個(gè)參數(shù)是數(shù)據(jù)本身,第二個(gè)參數(shù)aes中是我們的美學(xué)映射,稱為映射。我們用+添加的幾何對(duì)象。例如,在此可視化中,我們將點(diǎn)添加為幾何對(duì)象。這些幾何對(duì)象始終以geom_開(kāi)頭。然后,我們必須告訴ggplot顯示哪種幾何對(duì)象:geom_point()
上面的代碼也可以用如下方式表示:

ggplot(celebs, aes(x = age, y = oscars)) +
  geom_point()

我們不必命名參數(shù)。只要我們保持參數(shù)的順序相同,就可以省略data =mapping =

因此主要概念就是:ggplot(數(shù)據(jù),aes(映射))+幾何對(duì)象

相同的美學(xué),不同的幾何對(duì)象

為了欣賞將美學(xué)映射應(yīng)用于任何幾何對(duì)象這一事實(shí),我們可以將geom_point更改為geom_text,從而在屏幕上顯示文本:

ggplot(celebs, aes(x = age, y = oscars)) +
  geom_text(label = "Some text")

可以看到相同的x、y坐標(biāo)可以應(yīng)用于不同的幾何對(duì)象

相同的幾何對(duì)象,不同的美學(xué)

接下來(lái),向我們的可視化中添加另外的美學(xué)映射。點(diǎn)的顏色應(yīng)映射到電影明星的性別:顏色->性別,透明度->性別

ggplot(celebs, aes(x = age, y = oscars, 
                   color = gender)) +
  geom_point(size = 9)
ggplot(celebs, aes(x = age, y = oscars, 
                   alpha = gender)) +
  geom_point(size = 9)

將美學(xué)添加到特定的幾何圖形中

當(dāng)我們向ggplot函數(shù)添加美學(xué)映射時(shí),它將應(yīng)用于每個(gè)后續(xù)幾何對(duì)象。例如,在以下示例中,我們將美學(xué)映射顏色->性別應(yīng)用于geom_pointgeom_spoke

ggplot(celebs, aes(x = age, y = oscars, 
                   color = gender))+
  geom_point(size=9)+
  geom_spoke(angle = .45, radius =1)

可以看到我們繼續(xù)添加了geom_spoke幾何對(duì)象,它以一定角度顯示短線,而此時(shí)顏色也映射到了此幾何對(duì)象中。
但是也許我們只想將顏色->性別的美學(xué)映射應(yīng)用于點(diǎn)而不是短線。我們可以通過(guò)向geom_point添加另一個(gè)aes函數(shù)來(lái)做到這一點(diǎn):

ggplot(celebs, aes(x = age, y = oscars)) +
  geom_point(aes(color = gender),size = 9)+
  geom_spoke(angle = .45, radius =1)

此時(shí)圖中顏色只映射到了點(diǎn)的幾何對(duì)象中,并沒(méi)有改變短線的顏色

ggplot函數(shù)中的美學(xué)映射適用于任何幾何對(duì)象,我們可以稱之為全局映射,而幾何對(duì)象中的美學(xué)映射僅適用于此特定幾何對(duì)象,稱之為局部映射

不要將一種美學(xué)映射到多個(gè)變量

但是,此時(shí)我們應(yīng)注意不要太有創(chuàng)意。例如,你可以將顏色映射到電影明星的性別和名字:

ggplot(celebs, aes(x = age, y = oscars)) +
  geom_point(size = 7, aes(color = gender)) +
  geom_text(aes(label = name, color = name),nudge_y = -0.2)

查看右側(cè)的圖例。性別是不存在布拉德·皮特(Brad Pitt),因?yàn)樗淮嬖凇?code>ggplot感到困惑,因?yàn)槲覀儗⒍鄠€(gè)變量應(yīng)用于一種美學(xué)。不建議這樣做。一般ggplot會(huì)將第一個(gè)美學(xué)映射的名稱保留為圖例的標(biāo)題,而變量的值將用作圖例標(biāo)簽。

要了解ggplot2中各種功能,請(qǐng)查看官方文檔,這一節(jié)我們主要介紹了ggplot2中的一些關(guān)鍵概念,美學(xué)、映射、幾何對(duì)象等,理解這些概念是我們后續(xù)學(xué)好數(shù)據(jù)可視化分析的基礎(chǔ),后面將會(huì)在一系列實(shí)戰(zhàn)案例中來(lái)不斷的深入學(xué)習(xí)。

希望在學(xué)習(xí)本節(jié)后大家會(huì)感到更有信心

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,687評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,640評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,957評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,682評(píng)論 6 413
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,011評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評(píng)論 3 449
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,183評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,714評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,435評(píng)論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,665評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,838評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,251評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,588評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,379評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,627評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容