美學(xué)铣卡,幾何链韭,映射,比例尺煮落,都是什么敞峭?
本節(jié)主要向初學(xué)者簡要介紹ggplot2中的一些關(guān)鍵概念
先看下面的代碼:
ggplot(celebs,aes(x = age, y = oscars)) +
geom_point(size = 7,aes(color = gender)) +
geom_text(aes(label = name))
乍一看,對于ggplot2
的初學(xué)者來說蝉仇,這似乎簡直是胡言亂語旋讹。你可能猜測到ggplot
是一個(gè)函數(shù)兢卵,并且此代碼生成的可視化結(jié)果可能表示點(diǎn)和文本猿棉。但到底aes
是什么或者geom_text
或者size
是什么意思?
要在ggplot2
中實(shí)現(xiàn)數(shù)據(jù)可視化开睡,首先需要了解一些關(guān)鍵概念害驹。一旦了解了它們鞭呕,任何可視化都將變得更加容易。本節(jié)中我將不會(huì)創(chuàng)建精美的可視化圖宛官,也不會(huì)創(chuàng)建有意義的可視化葫松。但是,我們將學(xué)習(xí)一些重要的關(guān)鍵概念:美學(xué)底洗,映射腋么,幾何和比例。將用大部分示例來幫助大家了解它們的含義
首先安裝tidyverse
install.packages("tidyverse")
library(tidyverse)
繼續(xù)枷恕,將以下代碼粘貼到Rstudio的代碼編輯區(qū)党晋。先無需知道代碼的工作原理,只需將其粘貼并查看它是否產(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)。丹尼爾·戴·劉易斯贏得了三場灾而。我們的主要問題是胡控,如何將這些數(shù)據(jù)轉(zhuǎn)換為可視化圖像?
什么是數(shù)據(jù)可視化旁趟?
在關(guān)注關(guān)鍵概念之前昼激,我們應(yīng)該先花一點(diǎn)時(shí)間來思考我們需要解決的整體問題。在數(shù)據(jù)可視化中,我們要可視化的數(shù)據(jù)(例如數(shù)字橙困,文本)
可視化什么瞧掺?
就如同畫家通常在畫布上繪畫,我們也是一樣凡傅。每個(gè)新畫布都是空的辟狈。作為畫家和數(shù)據(jù)可視化工程師,我們的工作都是填補(bǔ)畫布夏跷。但是哼转,我們的畫布不是真實(shí)的東西,它是一種函數(shù)槽华。我們將此函數(shù)稱為ggplot
ggplot()
ggplot2
中的每個(gè)數(shù)據(jù)可視化都從此函數(shù)開始壹蔓。該函數(shù)創(chuàng)建一個(gè)我們必須填充的灰色畫布。最終猫态,我們添加到繪圖中的所有內(nèi)容都必須映射到實(shí)際數(shù)據(jù)佣蓉,從而實(shí)現(xiàn)數(shù)據(jù)可視化。如果我們像幼兒一樣在畫布上添加隨機(jī)點(diǎn)亲雪,就不會(huì)稱之為數(shù)據(jù)可視化
先舉一個(gè)例子偏螺,說明我們?nèi)绾巫龅竭@一點(diǎn):
湯姆·漢克斯(Tom Hanks)贏得了2項(xiàng)奧斯卡獎(jiǎng),他今年63歲匆光。我們可以在畫布上添加一個(gè)圓或一個(gè)點(diǎn)套像。該點(diǎn)必須以某種方式映射到數(shù)據(jù)。這就是它的工作方式:
年齡顯示在x軸上终息,奧斯卡數(shù)顯示在y軸上夺巩。從這個(gè)意義上說,湯姆·漢克斯不過是二維空間中的一個(gè)點(diǎn)周崭,讓我們暫時(shí)忘記要點(diǎn)柳譬。湯姆·漢克斯(Tom Hanks)也可以只是二維空間中巧克力棒的圖像:
關(guān)鍵是,湯姆·漢克斯的在視覺上可以是任何東西续镇。甚至只是一段文字美澳。所以這是第一條規(guī)則
:
在數(shù)據(jù)可視化中,我們將數(shù)據(jù)可視化為幾何對象
我們已經(jīng)看到了兩個(gè)幾何對象摸航,一個(gè)點(diǎn)和一個(gè)巧克力棒制跟。
以下更全面的列表:
一個(gè)點(diǎn)
一個(gè)矩形
一條線
路徑(或連接的線)
一個(gè)地區(qū)
在二維空間中,每個(gè)這樣的幾何對象都需要一個(gè)x坐標(biāo)和一個(gè)y坐標(biāo)酱虎。我們的Tom Hanks巧克力棒必須放在畫布上的某個(gè)位置雨膨。實(shí)際位置會(huì)影響我們解釋數(shù)據(jù)可視化的結(jié)果。如果巧克力棒在左邊读串,Tom Hanks會(huì)比實(shí)際年齡年輕聊记。因此撒妈,巧克力棒在空間中的位置與數(shù)據(jù)之間存在映射。我們稱這種映射為美學(xué)映射排监。每種美學(xué)映射都告訴我們有關(guān)幾何對象的一些可視化信息狰右。下面介紹一個(gè)可視化例子:
ggplot(celebs,aes(x = age, y = oscars)) +
geom_point(size = 7,aes(color =oscars)) +
geom_text(aes(label = name))
在這個(gè)例子中,我們將一個(gè)點(diǎn)用作幾何對象舆床。每個(gè)點(diǎn)都有三個(gè)美學(xué)映射棋蚌。首先,通過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
中竟秫,定義此類映射的函數(shù)為aes,在Rstudio中復(fù)制以下代碼
aes(x = age,
y = oscars,
color = oscars)
Aesthetic mapping:
* `x` -> `age`
* `y` -> `oscars`
* `colour` -> `oscars`
通過這種映射跷乐,每個(gè)幾何對象將根據(jù)每個(gè)電影明星的年齡和奧斯卡獎(jiǎng)的數(shù)量位于畫布相對位置肥败。此外,每個(gè)幾何對象的顏色將映射到每個(gè)電影明星贏得的奧斯卡獎(jiǎng)的數(shù)量愕提。這是我們的第二條規(guī)則
:
數(shù)據(jù)映射到應(yīng)用于幾何對象的美學(xué)映射
幾何對象馒稍、美學(xué)和映射之間的相互作用
現(xiàn)在我們知道,在使用ggplot2進(jìn)行數(shù)據(jù)可視化時(shí)浅侨,我們先將美學(xué)映射到幾何對象纽谒。讓我們在電影明星數(shù)據(jù)集的幫助下了解這一想法。以下數(shù)據(jù)可視化表示散點(diǎn)圖如输,即點(diǎn)作為映射到二維空間上的幾何對象
ggplot(data = celebs, mapping = aes(x = age, y = oscars)) +
geom_point()
ggplot
是一個(gè)函數(shù)鼓黔,帶有兩個(gè)參數(shù)。第一個(gè)參數(shù)是數(shù)據(jù)本身不见,第二個(gè)參數(shù)aes
中是我們的美學(xué)映射澳化,稱為映射。我們用+
添加的幾何對象脖祈。例如肆捕,在此可視化中,我們將點(diǎn)添加為幾何對象盖高。這些幾何對象始終以geom_
開頭慎陵。然后,我們必須告訴ggplot
顯示哪種幾何對象:geom_point()
上面的代碼也可以用如下方式表示:
ggplot(celebs, aes(x = age, y = oscars)) +
geom_point()
我們不必命名參數(shù)喻奥。只要我們保持參數(shù)的順序相同席纽,就可以省略data =
和mapping =
因此主要概念就是:ggplot(數(shù)據(jù),aes(映射))+幾何對象
相同的美學(xué),不同的幾何對象
為了欣賞將美學(xué)映射應(yīng)用于任何幾何對象這一事實(shí)撞蚕,我們可以將geom_point
更改為geom_text
润梯,從而在屏幕上顯示文本:
ggplot(celebs, aes(x = age, y = oscars)) +
geom_text(label = "Some text")
可以看到相同的x、y坐標(biāo)可以應(yīng)用于不同的幾何對象
相同的幾何對象甥厦,不同的美學(xué)
接下來纺铭,向我們的可視化中添加另外的美學(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ù)幾何對象舶赔。例如,在以下示例中谦秧,我們將美學(xué)映射顏色->性別
應(yīng)用于geom_point
和geom_spoke
:
ggplot(celebs, aes(x = age, y = oscars,
color = gender))+
geom_point(size=9)+
geom_spoke(angle = .45, radius =1)
可以看到我們繼續(xù)添加了geom_spoke
幾何對象竟纳,它以一定角度顯示短線,而此時(shí)顏色也映射到了此幾何對象中疚鲤。
但是也許我們只想將顏色->性別的美學(xué)映射應(yīng)用于點(diǎn)而不是短線锥累。我們可以通過向geom_point
添加另一個(gè)aes
函數(shù)來做到這一點(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)的幾何對象中,并沒有改變短線的顏色
ggplot
函數(shù)中的美學(xué)映射適用于任何幾何對象
集歇,我們可以稱之為全局映射
桶略,而幾何對象中的美學(xué)映射僅適用于此特定幾何對象
,稱之為局部映射
不要將一種美學(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
中各種功能榕茧,請查看官方文檔,這一節(jié)我們主要介紹了ggplot2中的一些關(guān)鍵概念,美學(xué)客给、映射用押、幾何對象等,理解這些概念是我們后續(xù)學(xué)好數(shù)據(jù)可視化分析的基礎(chǔ)靶剑,后面將會(huì)在一系列實(shí)戰(zhàn)案例中來不斷的深入學(xué)習(xí)蜻拨。