一小時掌握R語言數據可視化

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

展開一張畫布

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

[root@centos $] R> library(ggplot2)> ggplot()

使用geom_abline、geom_hline、geom_vline畫直線

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

> ggplot() + geom_hline(yintercept = 5)

我們也可以畫一條豎線

> ggplot() + geom_vline(

當然我們也可以畫斜線,

> 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作圖原理以及基本的幾種作圖方式,基於這些知識相信你很容易能做出精美的圖像了

推薦閱讀:

阿里天池大數據競賽心得 : 前50強付出與回報
用數據對女生胸圍來次一本正經的探索吧!
go語言如何入門,如何提高?
大數據驅動的人工智慧時代,如何成為2%不被淘汰的人?

TAG:R编程语言 | 数据分析 | 大数据 |