R語言數據可視化ggplot2包

2021-03-02 R語言

ggplot2是R語言最為強大的作圖軟體包,有著自成一派的可視化理念,數據可視化是數據分析的重要一步,讓我們通過由淺入深的掌握數據可視化的精髓。

展開一張畫布

ggplot2和其他作圖工具不同,它是以圖層覆蓋圖層的方式畫出一個完美圖像的,就像是photoshop裡的圖層,那麼首先我們得有一張畫布(如果沒有安裝R語言和ggplot2請見《 十八-R語言特徵工程實戰 》)

> library(ggplot2)> ggplot()

使用geom_abline、geom_hline、geom_vline畫直線

下面我們來在這張畫布上畫一條橫線:

> ggplot() + geom_hline(yintercept = 5)

我們也可以畫一條豎線

> ggplot() + geom_vline(xintercept = 5)

當然我們也可以畫斜線,

> geom_abline(intercept = 2.5, slope=1)

本應該畫一條斜率為1,截距為2.5的斜線,但是因為畫布不會自動移動到這條直線所在的位置,所以我們要實現幾個點來定位一下畫布,那麼怎麼畫點呢,我們先來研究一下

使用geom_point畫點

下面我們來一張空畫布上畫一個點,畫點和畫線不同在於:線可以指定一個x或y的截距就可以了,可以作為一個簡單的參數傳給geom_hline或geom_vline,但是畫點涉及到的是一些x、y的數據值,ggplot是把數據和作圖撇清的,也就是數據是數據,成像是成像

我們先來構造點:

> x <- c(1,2,3)> y <- c(1,3,4)> data <- data.frame(x,y)> str(data)'data.frame':      3 obs. of  2 variables: $ x: num  1 2 3 $ y: num  1 3 4

我們其實構建了一個frame,裡面包含了三個點:(1,1), (2,3), (3,4)

那麼如果要畫出這些點的話應該這樣:

> ggplot(data, aes(x = x, y = y)) + geom_point()

前面是聲明數據部分,後面是聲明怎麼成像

下面我們開始調整geom_point的參數,比如展示不同的顏色(左),和展示不同的形狀(右)

> ggplot(data, aes(x, y)) + geom_point(aes(colour = factor(y)))> ggplot(data, aes(x, y)) + geom_point(aes(shape = factor(y)))

如果顏色不是按factor區分,而是按連續值來區分,那麼就是漸變形式,即

> ggplot(data, aes(x, y)) + geom_point(aes(colour = y))

還可以展示不同的大小,可以固定大小(左),也可以根據數據確定大小(右)

> ggplot(data, aes(x, y)) + geom_point(aes(size = 3))> ggplot(data, aes(x, y)) + geom_point(aes(size = y))

這裡我們要說明一下aes的作用,看下面兩個用法(如圖左、右):左邊的含義就是畫紅色點,右邊是按照指定的一個維度展示不同的顏色

> ggplot(data, aes(x, y)) + geom_point(colour="red")> ggplot(data, aes(x, y)) + geom_point(aes(colour="red"))

接著上面劃線一節,我們在已經畫了點的畫布上再畫一條斜線:一條斜率為1,截距為1的直線,也就是y=x+1,那麼一定是經過(2,3),(3,4)兩個點的

> ggplot(data, aes(x, y)) + geom_point(aes(colour = y)) + geom_abline(slope = 1, intercept = 1)

使用geom_bar來畫直方圖

直觀上看,直方圖是表達一種累積量,因此默認的直方圖的高度是counts或sum,也就是像下面這樣子:因為我們的x只有1、2、3單獨的三個值,所以直接geom_bar()高度相同,但如果判斷x<2,那麼有一個滿足,兩個不滿足,所以高度分別是1和2

> ggplot(data, aes(x)) + geom_bar()> ggplot(data, aes(x<2)) + geom_bar()

當然我們可以自己指定直方圖的高度的計算方法,以下兩種方法效果相同

> ggplot(data, aes(x)) + geom_bar(aes(weight=y))> ggplot(data, aes(x,y)) + geom_bar(stat = "identity")

如果我們想要把多種取值的統計數目累加顯示在柱狀圖上,可以這樣:這裡面對同一個x,不同y出現總數不一樣,累加起來就像下圖展示,其中如果y是數字,那麼想把他當成類別,需要轉成factor

> x <- rep(c(1,2), c(2,3))> y <- rep(c(3,2), c(1,4))> data <- data.frame(x,y)> ggplot(data, aes(x)) + geom_bar(aes(fill=factor(y)))

當然我們也可以不簡單堆疊起來,比如扁平放置(左),或拉伸至頂部(右)

> ggplot(data, aes(x)) + geom_bar(aes(fill=factor(y)), position="dodge")> ggplot(data, aes(x)) + geom_bar(aes(fill=factor(y)), position="fill")

利用geom_density畫概率密度曲線

概率密度就是某些值出現的頻次多少的一個曲線,並做平滑,如下:

> x <- rep(c(1,3,7,11,23,50,60),c(1,30,400,60,4,55,11))> y <- rep(c(1,3,7,11,23,50,60),c(1,30,400,60,4,55,11))> data <- data.frame(x,y)> ggplot(data, aes(x)) + geom_density()

我們可以調整平滑的寬度:

> ggplot(data, aes(x)) + geom_density(adjust = 1/5)

如果我們想按照不同的y值來分開畫密度圖,並且用不同顏色來表示不同的y值,那麼我們可以用描邊的方式(左),也可以用填充的方式(中),當然也可以兩者結合

> ggplot(data, aes(x, colour = factor(y))) + geom_density(adjust = 1/5)> ggplot(data, aes(x, fill = factor(y))) + geom_density(adjust = 1/5)> ggplot(data, aes(x, colour = factor(y), fill = factor(y))) + geom_density(adjust = 1/5, alpha = 0.1)

和柱狀圖一樣,我們也可以通過geom_density的position參數來顯示累計情況:

> ggplot(data, aes(x, fill = factor(y))) + geom_density(adjust = 1/5, position='fill')> ggplot(data, aes(x, fill = factor(y))) + geom_density(adjust = 1/5, position='stack')

用geom_text和geom_label寫標註文本

為了讓圖像更清晰,我們需要把關鍵數據打上標籤展示出來,我們可以這樣做:

> ggplot(data, aes(x, y, label=rownames(data))) + geom_point(aes(colour = y)) + geom_abline(slope = 1, intercept = 1) + geom_text(check_overlap = TRUE)> ggplot(data, aes(x, y, label=rownames(data))) + geom_point(aes(colour = y)) + geom_abline(slope = 1, intercept = 1) + geom_label()

總結

本節介紹了ggplot作圖原理以及基本的幾種作圖方式,基於這些知識相信你很容易能做出精美的圖像了

選摘:www.shareditor.com

R語言公眾號是數據人網http://shujuren.org運營的公眾號。數據人網是數據人學習、交流和分享的平臺。點擊【閱讀原文】,進入【數據人網】,學習、分享和傳播數據知識。

我們都是數據人,我們致力於從數據中學習,努力發覺數據之洞見,積極利用數據之價值!

相關焦點

  • R語言學習:數據可視化技能,Pair Plot,LR模型手寫版,dplyr包across函數,快速學習ggplot2包畫圖
    01 R語言數據可視化技能數據可視化目的是為了發現和溝通。R語言擅長做數據可視化。數據可視化技能是我們做數據科學工作的核心技能之一。我喜歡學習和實踐R語言做數據可視化知識,增進自己的數據可視化技能。知識總結:1 使用dplyr包和tidyr包做數據準備工作2 使用ggplot包做數據可視化工作我創建了R語言群,歡迎大家加入,可以掃描文末的二維碼
  • R語言學習:R4DS學習、6種join操作理解、case_when函數理解、ggplot2包做數據可視化
    06 R4DS第一章  ggplot2包與數據可視化簡要筆記1 為什麼需要數據可視化2 ggplot2包做數據可視化的邏輯圖形語法+分層架構3 內容結構1)準備工作2)以研究mpg數據displ與hwy的關係的問題做引子,介紹利用數據可視化技術做圖形化分析3)接下來介紹ggplot
  • 空間地理數據可視化之 ggplot2 包及其拓展
    前言上次 R 可視乎主要講述了《Geospatial Health Data》[1]一書中關於空間地理數據可視化用 R 包製作地圖的基礎內容,參見 R可視乎|空間地理數據可視化(1)。本篇將繼續介紹空間地理數據可視化的 R 包和函數。
  • Python語言plotnine VS R語言ggplot2
    相對於R中的基礎可視化包,是基於圖形語法的繪圖包,一經提出就迅速受到廣大R語言使用者的喜愛。ggplot2包利用圖層疊加的繪圖方式,往圖像上不斷的添加圖形元素、注釋、統計結果等內容。plotnine庫可以看作是在Python中對ggplot2包的一種實現,方便Python對數據可視化的應用。本文章會分別介紹在R和Python中,如何使用相關的庫進行數據可視化分析。
  • Python數據可視化--在Python中調用ggplot進行繪圖
    如果你熟悉R語言,那麼你一定聽過ggplot2,它是R語言中非常好的數據可視化包,容易學習,功能強大。
  • Day7:R語言課程 (R語言進行數據可視化)
    學習目標使用擴展包「ggplot2」繪製圖表。使用「map」函數進行數據結構迭代。導出在R環境之外使用的圖片。1.設置數據框以進行可視化在本課中需要製作與每個樣本中的平均表達量相關的多個圖,還需要使用所有可用的metadata來適當地注釋圖表。觀察rpkm數據。
  • 數據科學養成記 之 R語言基礎(2)——關於R包
    在上一節的學習中,我們已經學習了如何將數據導入R中進行數據分析。R作為一種主力的分析語言有著其獨特的優勢:大量的R包可供大家使用,提供方便快捷的數據分析,挖掘。目前有上千個R包(R package)可供大家使用,可從cran-r 下載。
  • 【R語言】--- ggplot2包的geom_bar()函數繪製柱狀圖
    柱狀圖又叫條形圖,是數據展示最重要的一類統計圖,數據分析結果展示中使用頻率非常高,各類統計軟體均能繪製。在R語言中,有很多包可繪製柱狀圖,比如graphics包barplot()函數和ggplot2包geom_bar()函數。本文介紹ggplot2包的geom_bar()函數繪製柱狀圖。
  • R語言可視化——ggplot圖表配色技巧
    圖表配色是一個很深奧的話題,多虧了R語言平臺的眾多開發者貢獻的配色包,讓圖表的配色不再深不可測。第二種情況,可以使用RColorBrewer包中的配色卡,以下是該包scale_colour_brewer()函數所允許使用的所有離散顏色色卡。該配色系統方案給予我們三種關於分類變量的配色場景:
  • R語言可視化學習筆記之ggridges包
    作者:嚴濤 浙江大學作物遺傳育種在讀研究生(生物信息學方向)偽碼農,R語言愛好者,愛開源。
  • 1小時掌握R語言數據可視化
    ggplot2是R語言最為強大的作圖軟體包,有著自成一派的可視化理念,數據可視化是數據分析的重要一步,讓我們通過由淺入深的掌握數據可視化的精髓。
  • 中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?
    我們將在這篇文章中介紹我們如何以及為何要使用 R 語言的 ggplot2 軟體包來創建可直接使用的圖表,我們也會給出我們的流程和代碼以及分享我們一路上所學到的東西。BBC 視覺與數據新聞團隊的數據記者已經使用 R 來執行複雜和可重複的數據分析以及構建原型一些時日了。
  • R語言可視化學習筆記之ggridges包繪製山巒圖
    ggplot2學習筆記之圖形排列R包ggseqlogo |繪製序列分析圖ggplot2高效實用指南 (可視化腳本、工具、套路、配色)簡介ggridges包主要用來繪製山巒圖。尤其是針對時間或者空間分布可視化具有十分好的效果。
  • 數據可視化完美指南-R-python
    從數據到圖表有什麼樣的數據做什麼樣的圖作者提供了一張樹狀圖,幫助並引導我們找到合適自己數據的的可視化方式What kind of data do you have?# Librarieslibrary(tidyverse)## -- Attaching packages -- tidyverse 1.2.1 --## √ ggplot2 3.2.0 √ purrr 0.3.2## √ tibble 2.1.3 √ dplyr 0.8.3## √ tidyr
  • R語言的ggplot2+ggforce包繪製散點圖並添加分組邊界
    之前的推文介紹過ggplot2繪圖添加橢圓分組邊界和圓形分組邊界,藉助的函數分別是ggforce包裡的geom_circle()函數今天查找桑基圖的資料的時候發現了一份介紹ggforce這個包的使用方法的文章 https://rviews.rstudio.com/2019/09/19/intro-to-ggforce/ ,發現發現添加分組邊界還有其他的實現方法,今天的推文記錄一下
  • 數據可視化︱通過設計提升R語言的數據可視化效果
    當我開講R語言課程時,開場白通常是:像紐約時報的圖片部門或者Facebook現在正在使用這款軟體來操作數據、產生巨大的可視化。在R語言中,我利用絕妙的ggplot2包中的geom_segment()命令來繪製起訖點重心間纖細透明的白色線條。我覺得R語言製作出的圖片在黑色背景下顯得特別漂亮,但是之後我們將其導入AdobeIllustrator,Oliver將一系列額外的透明效果應用在線條上,使得線條在深藍的背景下熠熠奪目(我們在整本書中使用了深藍)。
  • R|ggplot2(五)|scale 修改默認設置
    作者:dwzb,R語言中文社區專欄作者。知乎專欄:https://zhuanlan.zhihu.com/Data-AnalysisR第一篇戳:R|ggplot2(一)|一個完整的繪圖流程第二篇戳:R|ggplot2(二)|覆蓋柱狀圖各種需求第三篇戳:R|ggplot2(三)|coord 系列函數坐標軸轉換第四篇戳:R|ggplot2(四)|stat_ geom_ 和position
  • 地圖可視化繪製 | R-ggplot2 NC地圖文件可視化
    nc數據文件的R包讀取在R中讀取nc文件,我們首選ncdf4包,其使用參考網址如下:https://rdrr.io/cran/ncdf4/。nc數據的可視化繪製由於我們使用的是ggplot2進行繪製,所以我們直接使用raster包進行nc文件的讀取(其實也是調用ncdf4包進行處理),數據我們就使用昨天分享數據的數據:數據(代碼)分享 | 全球生物氣候指標數據集。
  • 全棧數據之R語言常用包和函數
    全棧數據之路系列:全棧數據之Linux常用命令總結全棧數據之MySQL常用命令總結全棧數據之Python常用工具和函數《R語言實戰》,這是高濤、肖楠等翻譯的一本書詳細全面介紹了入門、圖形、統計、回歸、方差、功效分析、廣義線性模型、主成分、因子分析
  • 15種獨一無二的創新數據可視化方式
    本文總結了15種驚豔的可視化方式,涵蓋了各種各樣的主題。可以應用於選擇的任何工具中,但本文將以Python、R、Tableau和D3.js為例。 1. 用R進行數據可視化在選擇數據可視化工具時,R語言是創建ggplot2庫不二之選。只需幾行代碼就能實現有個性的可視化、獲取實時反饋、揭示數據模式。