R數據科學之ggplot2入門

2021-03-02 壹小白的style
本篇文章是查閱各種網絡技術博客撰寫的,僅供學習使用,如有侵權立即刪除。本部分需要提前安裝tidyverse包。一個小技巧,在R中設置鏡像只有下載包會有驚喜~(其實就是會快很多啦)

options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) 

install.packages('tidyverse')

library(tidyverse)

我們剛才下載的tidyverse包中有很多可以進行分析的數據集,如mpg diamonds ……

mpg數據集

在R中輸入"?mpg"可以查看mpg數據集的詳細信息。mpg是一個234*11的數據集。這裡對mpg數據集做一個簡介。

manufacturer:manufacturer name(製造商)

model:model name(型號)

displ:engine displacement, in litres(發動機排量)

year:year of manufacture(製造年份)

cyl:number of cylinders(氣缸數)

trans:type of transmission(變速器類型)

drv:the type of drive train, where f = front-wheel drive, r = rear wheel drive, 4 = 4wd(驅動類型)

cty:city miles per gallon(每加侖可走城市英裡)

hwy:highway miles per gallon(每加侖可走告訴英裡)

fl:fuel type(燃油類型)

class:"type" of car(車型)

從一個簡單的繪圖開始~

代碼:

ggplot(mpg)+

  geom_point(aes(displ,hwy))

結果:

可以看出ggplot作圖非常簡便,上述語句就是在說:對mpg這個數據集的displ和hwy兩個變量作散點圖。

這樣看這個圖形,是不是想換個顏色?

代碼:

ggplot(mpg)+

  geom_point(aes(displ,hwy),color = 'blue')

結果:

其實這裡存在一個問題:我們的數據有234個點,但圖中的散點應該沒有234個吧!這種現象叫「過繪製」。這是因為繪圖的時候對displ和hwy進行了四捨五入,所以很多點都顯示不出來了。為了解決「過繪製」問題,可以給每個數據點增加隨機擾動。

代碼:

ggplot(mpg)+

  geom_point(aes(displ,hwy),position = 'jitter')

結果:

我們可能見過這樣的圖:用不同顏色表示不同群體的情況。如不同性別的人消費情況如何,針對這個情形,通常會用不同的顏色表示男性和女性的消費情況,那麼圖形可能是男性的消費情況用紅色表示,女性的消費情況用藍色表示,那麼你想像好圖形是怎樣的了嘛?在ggplot2中很容易實現,只需要稍微添加一些參數即可。這裡以mpg數據集為例,做出不同類型的汽車,它們的發動機大小和耗油情況。

代碼:

ggplot(mpg)+   #+不能放在一行的開頭,你儘管試試,看看會不會出錯。

  geom_point(aes(displ,hwy,color = class))

結果:

註:初次接觸mpg數據集的人可能會對各個變量產生很多困惑,別著急哈,小編一開始也是這樣的。這裡先說明displ這個變量,它的含義是發動機排量。其實你也可以理解為引擎大小。另外,關於color位置的放置,如你所見,放在aes外面 就是全局的改變,放在aes裡面,其實相當於進行了分組,不同的組顏色不一樣。

上面是用顏色查看不同類型汽車的一些情況,那麼其實也可以用大小來看看它們的具體情況。

代碼:

ggplot(mpg)+

  geom_point(aes(displ,hwy,size = class))

結果:

如果用透明度或者形狀呢?

代碼:

ggplot(mpg)+

  geom_point(aes(displ,hwy,alpha = class))

結果:

代碼:

ggplot(mpg)+

  geom_point(aes(displ,hwy,shape = class))

結果:

其實這幅圖「醜到爆」。也不是為了說明什麼問題,想表達的意思就是你可以用顏色、大小、透明度、形狀等等反映某種情況,進行詳細深入的分析。當然,如果你使用的是形狀(shape),那可能就要小心一點,因為ggplot2默認顯示6中形狀,如果多於6種,剩下的就不會顯示在圖形上,切記!

總結一下,常用的點屬性參數。

color:點的顏色

size:點的大小

stroke:點的邊框大小

fill:點的填充顏色

shape:點的形狀

註:shape取值0~14的邊界顏色由color決定,15~20的填充顏色由color決定,21~24的邊界顏色由color決定,填充顏色由fill決定。

以上介紹了用顏色、大小、形狀、透明度對圖形的散點進行歸類,下面介紹分面。分面其實就是將數據分成不同的子集

對單個離散型變量進行分面

代碼:

ggplot(mpg)+

  geom_point(aes(displ,hwy))+

  facet_wrap(~class,nrow = 2)

結果:

對單個離散型變量進行分面用到facet_wrap(),nrow=2表示圖形排列成兩行,相應的有ncol屬性,可以儘管試試。

對兩個變量進行分面。

代碼:

ggplot(mpg)+

  geom_point(aes(displ,hwy))+

  facet_grid(drv~cyl)

結果:

前面只是介紹了geom_point()這個幾何對象,ggplot2中還有很多幾何對象。

其實還可以將這些幾何對象繪製在一張圖上。

代碼:

ggplot(mpg,aes(displ,hwy))+

  geom_point(aes(color = drv))+

  geom_smooth(aes(group = drv),color = 'red')

結果:

可以注意到代碼中aes(displ,hwy)的位置發生了改變,這樣做是因為geom_point()和geom_smooth()依賴的數據是一樣的,以後再畫圖的時候,就可以靈活地書寫代碼了。

再介紹一下坐標系。從箱線圖開始吧。

代碼:

ggplot(mpg)+

  geom_boxplot(aes(class,hwy))

結果:

如果將x和y進行交換。

代碼:

ggplot(mpg)+

  geom_boxplot(aes(class,hwy))+

  coord_flip()

結果:

有些時候就是簡單地將x與y進行交換,就更易於看圖的人對圖進行分析。

當然ggplot2這一塊還有很多內容,它還能做出很多複雜的圖形,後期也會做更多的介紹,這裡先入一下門吧,當然也建議大家盡情嘗試這些美妙的函數。

學到這裡,其實你已經可以做一些簡單的圖形了,不如嘗試著繪製上面的四幅圖吧(有些模糊,忍忍哈)。

diamonds數據集

在R中輸入"?diamonds"可以查看diamonds數據集的詳細信息。diamons是一個53940*10的數據集。同樣,對diamonds數據集做一個簡介。

price:price in US dollars(價格)

carat:weight of the diamond (0.2–5.01)(鑽石大小)

cut:quality of the cut (Fair, Good, Very Good, Premium, Ideal)(鑽石切割質量)

color:diamond colour, from D (best) to J (worst)

clarity:a measurement of how clear the diamond is (I1 (worst), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (best))(鑽石淨度)

從一個簡單的條形圖開始吧。

代碼:

ggplot(diamonds)+

  geom_bar(aes(cut))

結果:

注意到縱坐標是count,這顯然和我們的認知是一樣的。該條形圖是cut不同取值下對應的頻數分布圖。那我們思考一個問題:count從何而來?答案是繪圖的時候自動計算出來的。對於geom_bar(),其實還計算了prop。接下來將

條形圖的縱坐標換成prop。

代碼:

ggplot(diamonds)+

  geom_bar(aes(x = cut,y = ..prop..,group = 1))

結果:

可以試試,沒有"group = 1"會怎麼樣?

在散點圖中,我們用顏色等屬性進行了分類,在條形圖中依然可以!

代碼:

ggplot(diamonds,aes(cut,fill = clarity))+

  geom_bar()

結果:

不知道你喜不喜歡,這個圖反正我不喜歡!增加一個參數"position = 'dodge'"。

代碼:

ggplot(diamonds,aes(cut,fill = clarity))+

  geom_bar(position = 'dodge')

結果:

這個是將每組的條形並列放置,方便比較不同切割質量下鑽石的淨度情況。好吧,還是有點醜。

那麼今天就講這麼多啦~

相關焦點

  • R|ggplot2(五)|scale 修改默認設置
    知乎專欄:https://zhuanlan.zhihu.com/Data-AnalysisR第一篇戳:R|ggplot2(一)|一個完整的繪圖流程第二篇戳:R|ggplot2(二)|覆蓋柱狀圖各種需求第三篇戳:R|ggplot2(三)|coord 系列函數坐標軸轉換第四篇戳:R|ggplot2(四)|stat_ geom_ 和position
  • R繪圖之ggplot2-散點圖(一)
    ggplot(heightweight,aes(x = ageYear,y = heightIn,shape = sex,colour = sex))+ geom_point()+  scale_shape_manual(values = c(1,2))+    scale_color_brewer(palette = "Set1")
  • R可視化01|ggplot2-ggplot2簡介
    , JSM)上被授於考普斯總統獎(The Committee of Presidents of Statistical Societies Awards,COPSS ),改獎項是國際統計學領域的最高獎項,被譽為 「統計學的諾貝爾獎」;Wickham現為Rstudio(Rstudio為R語言的一種知名IDE)的首席科學家,同時為奧克蘭大學、史丹福大學和賴斯大學的統計系兼職教授;Wickham為了使得數據科學更簡潔
  • 地理數據科學培訓班第一課之初識R語言
    直播信息:直播時間:2020 年 7 月 11 日晚上 9 點;地理數據科學培訓班開班啦R 和 RStudio 的安裝是非常簡單的,這裡提供一些安裝 Tips。在文章的最後我還通過一個案例帶大家走進奇幻的 R 世界。
  • 想自學R語言,從哪裡入門|R教程
    因此建議以書+其他資源使用。書一般而言,書本的內容更加系統全面。在完全小白的階段,建議先通讀一遍,之後按需翻閱各章節。《An Introduction to R》(中文版為《R導論》)有時甚至有開發者本人作出的回答。且一個問題常有不同的人提供不同的方法,提供了多種解決的思路 。學習過程中遇到的絕大多數bug,都可以先檢索一下是不是有人問過。特定資源包的問題,也可以帶上tag,例如[ggplot2]進行提問。由於社區比較活躍,提問也很快會得到回答。一個相對不足之處是,由於問答都使用英語,對英語有畏懼心理的人比較難克服。
  • R 語言入門學習路線與資源匯總
    或者閱讀幾本不錯的R語言入門書籍,比如說《R語言實戰》[6]、《R數據科學》[7]等。對於初學者,建議看中文版即可。5.2 stringr包如果數據集中需要進行字符串操作,可以使用stringr[41]包,可以學習這個stringr包的幫助文件[42],這裡面包含許多有用的示例幫助快速入門。
  • 深度 R vs Python:R是現在最好的數據科學語言嗎?
    如果你正在尋找 R 之後的另一個語言去學習,我會推薦 SQL)他們還調查了人們去識別數據可視化的工具。他們發現 ggplot2 是最常見的可視化工具。我會在一篇即將發布的博客中解釋為什麼我喜歡 ggplot2,但如果我們只跟蹤人氣,O'reilly 的調查表明 ggplot2 時最常被使用的工具之一,甚至可能就是最常被使用的。
  • ggplot2拓展功能:局部放大和邊際密度圖
    library(ggplot2)p <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point(aes(color = Species), size = 3, alpha = 0.6) + scale_color_manual(values = c("#00AFBB", "#E7B800
  • 入門 ggplot2 的圖形語法
    ggplot2 包是 Hadly Wickham 開發(除 ggplot2 外,還有 plyr 和 reshape2 包)的一款通過 「+」,以圖層疊加的搭配組合,易於實現數據可視化的 R 包。ggplot2 以美輪美奐的統計製圖能力位居各類繪圖軟體排名前列,同時此包功能也在增加。此文簡單介紹 ggplot2 的基本原理和操作,便於大家對 ggplot2 快速入門。
  • 數據科學探索(python 與 R 的比較)
    這一期主要應用python和R 這2種工具對某真實信貸數據進行分析,通過數據的讀取、清洗、探索、模型構建等,比較2種方法在機器學習數據科學上的實現
  • R語言ggplot2 (一):ggplot2包安裝和初始作圖
    本文關注於ggplot2包的安裝、ggplot2基本作圖語法等。一 ggplot2的安裝> install.packages("ggplot2")#以上代碼也可以直接用install.packages("ggplot2",lib=""~/R/lib"")代替,這樣就只是把包安裝到路徑中,並不會載入路徑,#不過後續載入包就找不到路徑了,需要在library的時候指定路徑
  • R|ggplot2(四)|stat_ geom_ 和position
    知乎專欄:https://zhuanlan.zhihu.com/Data-AnalysisR第一篇戳:R|ggplot2(一)|一個完整的繪圖流程第二篇戳:R|ggplot2(二)|覆蓋柱狀圖各種需求第三篇戳:R|ggplot2(三)|coord 系列函數坐標軸轉換引用一句Hadley在ggplot2網站上的一句話A layer
  • R繪圖之ggplot2—添加注釋
    傳遞給圖層的其他基礎參數,如size, colour, alpha, fill, fontface等na.rm刪除缺失值時是否提醒annotate 函數的參數較為簡單,大多是layer()中的基礎參數第二部分: 添加文本添加文本類幾何對象library(ggplot2)library(ggsci)library
  • R|ggplot2(三)|coord 系列函數坐標軸轉換
    知乎專欄:https://zhuanlan.zhihu.com/Data-AnalysisR第一篇戳:R|ggplot2(一)|一個完整的繪圖流程第二篇戳:R|ggplot2(二)|覆蓋柱狀圖各種需求coord_ 系列函數可以改變xy軸的位置,默認使用 coord_cartesian(),我們可以改變成如下幾種coord_cartesian
  • rmarkdown+flexdashboard製作dashboard原型
    這裡所說的解決方案不僅是指R語言裡面有諸多的圖形語法系統(比如base系統、grid系統、lattic系統等),更重要的是它擁有(目前比較成熟的)系統級輸出方案,你可以理解為如何在項目中從一而終的組織你的分析內容、圖形布局、輸出方法等。
  • geom_bar | ggplot2-R
    的一些使用注意和方法常用的因子排序一般使用默認情況下,geom_bar 只需指定x或y即可繪製圖形,默認使用頻數,即stat = "count"ggplot(mtcars)+  geom_bar(aes(cyl))stat = "identity" 等同 geom_col分類變量x對應數值yggplot(mtcars)+  geom_bar
  • R-ggplot2 標準中國地圖製作
    ggplot2 + sf 中國標準地圖繪製cowplot 包實現地圖子圖插入ggplot2 + sf 中國標準地圖繪製本期的繪圖我們是按照如下圖表進行繪製的(該圖來自朋友公號):其實我很早就想試著用R進行此類圖表的繪製了,但由於強大的Arcgis和繪圖進度等原因
  • R-ggplot2 學術箱線圖製作
    本期推文就推出箱線圖(boxplot)的R-ggplot2 繪製方法,大家可以和 Python-matplotlib 箱線圖繪製 這篇文章對比下。(1)數據預覽由於數據和之前的數據一樣,且ggplot2 對繪圖數據也是有一定要求,現給出數據如下(部分):
  • R語言ggplot2做雙Y軸的一個簡單小例子
    參考連結 1、https://ggplot2.tidyverse.org/reference/sec_axis.html2、https://www.r-graph-gallery.com/line-chart-dual-Y-axis-ggplot2.html3、https://github.com/alex-koiter/Weather-and-Climate-figures4、https
  • R語言ggplot繪製峰巒圖繪製
    rm(list=ls())設置工作目錄setwd("C:/Users/Dell/Desktop/R_Plots/19ridge/")使用ggridges包繪製峰巒圖library(ggridges)library(ggplot2