第一章 使用ggplot2進行數(shù)據(jù)可視化

騰訊云鏡像:
options("repos" = c(CRAN="http://mirrors.cloud.tencent.com/CRAN/"))
創(chuàng)建ggplot圖形
繪圖模板:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))
ggplot()函數(shù)創(chuàng)建一個坐標系,可以在上面添加圖層。第一個data參數(shù)表示要使用的數(shù)據(jù)集。geom_point()函數(shù)表示向圖中添加一個點層,也就是創(chuàng)建一個散點圖,ggplot2中包含多種幾何對象作圖函數(shù),每種函數(shù)都可以向初始坐標系中添加不同類型的圖層。每個幾何對象函數(shù)都有一個mapping參數(shù),這個參數(shù)定義了如何將數(shù)據(jù)集中的變量映射為圖形屬性。mapping參數(shù)總是和aes()函數(shù)成對出現(xiàn),aes()函數(shù)的x參數(shù)和y參數(shù)分類指定映射到x軸的變量與映射到y(tǒng)軸的變量,它會在data參數(shù)中尋找所指定的映射變量。

圖形屬性映射
圖形屬性是圖中對象的可視化屬性,包括數(shù)據(jù)點的大小,形狀,顏色等,通過改變圖形屬性的值能以不同的方式來顯示數(shù)據(jù)點。例如:向二維散點圖中添加第三個變量,將其映射為圖形屬性。
color屬性


size屬性


alpha屬性


shape屬性
注:只能處理6個一類的分類變量,多出的變量值不會顯示在圖形中。


pch,fill參數(shù)
pch參數(shù)用于控制點的形狀,有如下形狀:


有的形狀相同比如0,15,22都是正方形。形狀之間的區(qū)別在于其顏色不同,而控制其顏色的參數(shù)有color和fill兩個??招男螤睿?-14)的邊界顏色由color決定;實行形狀(15-20)的填充顏色由color決定;填充形狀(21-24)的邊界顏色由color決定,填充顏色由fill決定。


分面
添加額外變量的一種方法是使用圖形屬性,另一種方法是將圖形分割成多個分面,即可以顯示數(shù)據(jù)子集的子圖。
facet_wrap()函數(shù)
facet_wrap()函數(shù)可以用于對單個變量進行分面,傳遞給facet_wrap()的變量應該是離散型的。


facet_grid()函數(shù)
facet_grid()函數(shù)可以對兩個變量進行分面,這個函數(shù)第一個參數(shù)也是一個公式,但該公式包含由~隔開的兩個變量名。如果不想在行或列的維度進行分面,你可以使用 . 來代替變量名,例如 + facet_grid(. ~cyl)。



幾何對象
幾何對象是圖中用來表示數(shù)據(jù)的幾何圖形對象。我們經(jīng)常根據(jù)圖中使用的幾何對象類型l唉描述相應的圖。想要改變圖中的幾何對象,需要修改添加在ggplot()函數(shù)中的幾何對象函數(shù)。
geom_point()


geom_smoonth()


ggplot2中的每個幾何對象函數(shù)都有一個mapping參數(shù),但是不是所有的圖形屬性都適合每種幾何對象。比如可以設(shè)置點的形狀,不能設(shè)置線的形狀,但是可以設(shè)置線的線型。
geom_smooth() 函數(shù)可以按照不同的線型繪制出不同的曲線,每條曲線對應映射到線型的變量的一個唯一值:


平滑曲線+散點圖:


gplot2 提供了 30 多種幾何對象,其擴展包甚至提供了更多(可以在 https://www.ggplot2-exts.org 查看更多樣例)。如果想全面地了解這些對象,最好的方式是學習 ggplot2 速查表(參見 http://rstudio.com/cheatsheets)。如果想掌握更多關(guān)于某個幾何對象的知識,那么可以使用幫助,如 ?geom_smooth。
group圖形屬性
和 geom_smooth() 一樣,很多幾何對象函數(shù)使用單個幾何對象來表示多行數(shù)據(jù)。你可以將這些幾何對象的 group 圖形屬性設(shè)置為一個分類變量,這樣 ggplot2 就會為這個分類變量的每個唯一值繪制一個獨立的幾何對象。這是一個非常方便的屬性,因為按照圖形屬性的這種分組不用添加圖例,也不用為幾何對象添加區(qū)分特征:(沒有特色,不建議使用)


多個幾何對象
要想在同一張圖中顯示多個幾何對象,可以向 ggplot() 函數(shù)中添加多個幾何對象函數(shù):


添加多個幾何對象函數(shù)的方法會使代碼產(chǎn)生重復,如果需要修改的時候工作量會更大且容易出錯,避免這種重復的方法是將一組映射傳遞給 ggplot() 函數(shù)。 ggplot2 會將這些映射作為全局映射應用到圖中的每個幾何對象中。


如果將映射放在幾何對象函數(shù)中,那么 ggplot2 會將其看作這個圖層的局部映射,它將使用這些映射擴展或覆蓋全局映射,但僅對該圖層有效。


同理,也可以為不同的圖層指定不同的數(shù)據(jù)。se=TRUE顯示置信區(qū)間,F(xiàn)ALSE不顯示置信區(qū)間。


統(tǒng)計變換
? 條形圖、直方圖和頻率多邊形圖可以對數(shù)據(jù)進行分箱,然后繪制出分箱數(shù)量和落在每個分箱的數(shù)據(jù)點的數(shù)量。
? 平滑曲線會為數(shù)據(jù)擬合一個模型,然后繪制出模型預測值。
? 箱線圖可以計算出數(shù)據(jù)分布的多種摘要統(tǒng)計量,并顯示一個特殊形式的箱體。
繪圖時用來計算新數(shù)據(jù)的算法稱為 stat(statistical transformation, 統(tǒng)計變換)。
下圖描述了geom_bar() 函數(shù)的統(tǒng)計變換過程:


每個幾何對象函數(shù)都有一個默認統(tǒng)計變換,每個統(tǒng)計變換函數(shù)都有一個默認幾何對象,因此幾何對象函數(shù)和統(tǒng)計變換函數(shù)可以互換使用。例如,可以使用 stat_count()替換 geom_bar() 來重新生成前面那張圖:


stat_summary()
stat_summary()函數(shù)可以對計算得出的某些摘要進行強調(diào)。

  • fun.y 表示指定對y的匯總函數(shù),同樣是輸入數(shù)字向量,返回單個數(shù)字,這里的y通常會被分組,匯總后是每組返回1個數(shù)字
  • fun.ymin 表示取y的最小值,輸入數(shù)字向量,每組返回1個數(shù)字
  • fun.ymax 表示取y的最大值,輸入數(shù)字向量,每組返回1個數(shù)字


位置調(diào)整
fill圖形屬性可以用于為條形圖上色


position參數(shù)
position參數(shù)的功能是對圖形進行位置調(diào)整,可選參數(shù):identity,fill,dodge,jitter等。
identity
當不對position進行指定時,默認為identity,采用堆疊式:



fill
百分式:


dodge
分離式:


jitter
過繪制:繪制散點圖是,當繪制的點很多時,可能會出現(xiàn)同一個位置出現(xiàn)點重復而導致繪制出來的三點數(shù)量與真實的點的數(shù)量不匹配的情況。


結(jié)果過繪制的問題可以通過講position設(shè)置為jitter,即添加擾動解決:


因為這種操作的用處非常大,所以 ggplot2 提供了 geom_point(position = "jitter") 的一種快速實現(xiàn)方式: geom_jitter()。

坐標系
坐標系可能是 ggplot2 中最復雜的部分。默認的坐標系是笛卡兒直角坐標系,可以通過其獨立作用的 x 坐標和 y 坐標找到每個數(shù)據(jù)點。
coord_flip()
coord_flip() 函數(shù)可以交換 x 軸和 y 軸。該方法對于x軸標簽過于密集而導致相互重合用較好的使用價值。


coord_quickmap()
coord_quickmap() 函數(shù)可以為地圖設(shè)置合適的縱橫比。當使用 ggplot2 繪制空間數(shù)據(jù)時,
這個函數(shù)特別重要(遺憾的是本書不涉及空間數(shù)據(jù)):


coord_polar()
coord_polar() 函數(shù)使用極坐標系。


圖形分層語法
ggplot(data = <DATA>) + #數(shù)據(jù)集
<GEOM_FUNCTION>( #幾何對象
mapping = aes(<MAPPINGS>), #映射
stat = <STAT>, #統(tǒng)計變換
position = <POSITION> #位置調(diào)整
) +
<COORDINATE_FUNCTION> + #坐標系
<FACET_FUNCTION> #分面
ggplot2使用隨記:
theme(panel.grid =element_blank()) + ## 刪去網(wǎng)格線
theme(axis.text = element_blank()) ## 刪去所有刻度標簽
theme(axis.text.y = element_blank()) ## 設(shè)置 axis.text.y 則只刪去 Y 軸的刻度標簽,X 軸同理。
scale_x_discrete(position = "top") #設(shè)置x軸的位置在頂部

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