1. 程式人生 > >R極簡教程-10:R語言繪圖基礎

R極簡教程-10:R語言繪圖基礎

R語言最強大的一點就是畫圖,那個無比強大的畫圖系統,再加上各種各樣的神級R包,讓我寫R語言中最喜歡的一點就是寫繪圖程式碼。

簡單來說,R語言原生的繪圖系統已經非常強大了,根本不需要其他東西的輔助,就可以繪製非常炫目的圖片,需要的僅僅是耐心。另外R語言還有一系列的繪圖輔助R包,比如著名的ggplot2,我經常用的plotly都是很好的工具。

再近幾年,R語言推出了Shiny框架,可以用R語言快速寫成一個網頁,這簡直不能更方便。

講真我已經在期待R語言釋出建站框架的那一天了。R已經能做分散式大資料了RSpark,建站還會遠嗎?

R語言繪圖基礎

再大的工程也是又一塊磚一塊磚壘起來了。在複雜的R圖也是又忒簡單的元素組成的,下面的這些東西,可謂是R繪圖最基本的元素,能把它們掌握,就可以繪製出相對OK的圖。

顏色

> plot(1:10,col="red")

這裡寫圖片描述

之前提到過,繪圖函式(比如bixplot或者plot)中的col引數就是控制顏色的,而顏色的選擇可以用問題,也可以用其他的一些標號,比如網站有一個很好很強大的R顏色列表

這裡寫圖片描述

面對上面這種浩如煙海的顏色,你可以直接把那個標號:”#XXXX”用到程式裡。

另外不得不推薦一個極好的R包,叫做RColorBrewer,這個包的功能主要就是提供一些自己已經配好色的R顏色,另外提供一系列顏色的分配,比如你想要從正黃色到正藍色直接過度10個顏色,就可以用這個包。

> colorRampPalette(brewer.pal(9
,"Blues"))(100) -> color > plot(1:100,col=color,pch=20,cex=2)

這裡寫圖片描述
這樣就從白色到正藍色劃分成100個過渡色。

又如:

> barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))

這裡寫圖片描述

RColorBrewer::brewer.pal函式的功能是直接呼叫這個包已經配好的顏色,其中有一系列名字,我最喜歡用的就是”Set2”,因為看上去比較素雅。

文字

有時候做了一個圖,想要在圖中加一些問題,這個問題可以用text函式來解決,就著剛才的圖,我再繼續往上邊加一個”Hello World!”

> barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))
> text(x=4,y=4,labels = "Hello World!",cex=2)

Alt text
讓我們來細看一下text函式的引數,x代表了橫座標,我這裡寫的是4,就是說希望寫再以第四個bar為中心的位置。y代表了高度,我寫的也是4,labels就是想要寫的話,可以把任何的字串嵌進來,最後一個引數是cex,這個是控制字型大小,1是預設值,如果你希望字型放大一倍,就設定為2.

根據我的經驗,想要一次性畫對圖還是有難度的,最好還是多嘗試幾次。調調位置,換換xy。慢慢就可以把圖做出來。

點、線

點和線是很基礎的元素,點的函式是points,線的函式是lines,要說明的是,每一次plot都會展開一副新的圖。也就是說,如果你已經用過plot畫了一部分圖了,還想要繼續往圖上新增東西,就需要用points或者lines函式,不能重新用plot。

> barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))
> points(rep(3,5),pch=20,cex=3,col="orange")

這裡寫圖片描述
上面的程式碼,我plot的時候,再1到5個橫座標上,都再縱座標為3的地方plot了一個橘色的點,做法其實和plot很像。

在plot或者point的時候,理論上你應該輸入x,y兩個引數,兩者應該是完全對應的,一一對應,前者是橫座標,後者是縱座標。但是如果你只輸入了一批資料,程式就會預設橫座標為1,2,3,4……縱座標是你輸入的數值。這就是為什麼,在這個函式裡,我只輸入了rep(3,5)而沒有輸入橫座標。

> barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))
> points(rep(3,5),pch=20,cex=3,col="orange")
> lines(sample(1:5),col="gray",lwd=2,lty=2)

這裡寫圖片描述

如果說是劃線的話,也很簡單,使用lines函式,用法和之前是一樣的,如果你輸入了對應的x,y座標,就可以直接繪製,如果只輸入一個vector,程式就預設橫座標是1,2,3……

後面的引數裡,lwd控制線的粗細,lty控制線的型別,lty=2意思是虛線。

標題

標題其實是很容易的,只需要再plot或者其他繪圖程式裡,新增main引數就行:

plot(1:10,main="This is a Title",cex.main=1.5)

這裡寫圖片描述

這個真沒什麼好說的,cex.main=1.5的意思是,標題的尺寸是標準值的1.5倍。此外值得說的是,如果你不喜歡這個Title,也可以用text手繪,那就稍微複雜一些。

圖例

圖例的目的就是望你看懂你在畫什麼,通過legend函式我們可以新增圖例。

x <- seq(-pi, pi, len = 65)
plot(x, sin(x), type = "l", ylim = c(-1.2, 1.8), col = 3, lty = 2)
points(x, cos(x), pch = 3, col = 4)
lines(x, tan(x), type = "b", lty = 1, pch = 4, col = 6)
title("legend(..., lty = c(2, -1, 1), 
       pch = c(NA, 3, 4), merge = TRUE)",
       cex.main = 1.1)
legend(-1, 1.9, 
       c("sin", "cos", "tan"), 
       col = c(3, 4, 6),
       text.col = "green4", 
       lty = c(2, -1, 1), 
       pch = c(NA, 3, 4),
       merge = TRUE, 
       bg = "gray90")

上述就是legend函式的一堆引數,其中col,lty等等都和plot一模一樣。

這裡寫圖片描述

座標軸

座標軸是很容易處理的東西。直接設定引數就行了。

> plot(1:10,xlab="X lab",ylab="y lab")

這裡寫圖片描述

有一個很有意思的情況是,如果想要更換座標軸上的1,2,3,4,5該怎麼辦?

plot(1:10, xaxt = "n", xlab='Some Letters')
axis(1, at=1:10, labels=letters[1:10])

這裡寫圖片描述

甚至於,如果想要將座標軸旋轉一些角度,應該怎麼辦?這個問題我經常遇到,原因就是有時候label的名字太長了。。。其實程式碼真的超簡單:

> par(las=2)
> plot(1:10, xaxt = "n", xlab='Some Letters')
> axis(1, at=1:10, labels=letters[1:10])

這裡寫圖片描述

構圖函式

根據我幾年的R語言經驗,構圖函式真的是一個很多教材都沒有認真寫的東西,但實戰中經常經常經常涉及這方面問題啊,在這裡我記錄了一下:

首先就是,如果你想在一張圖上繪製多個圖形怎麼辦?

> par(mfrow=c(2,3))
> plot(1:10)
> plot(1:10)
> plot(1:10)
> plot(1:10)
> plot(1:10)
> plot(1:10)

這裡寫圖片描述

使用par(mfrow=c(2,3))命令可以完成比較規則的構圖,其中引數中,前一個代表行,後一個代表列,我這裡的意思就是,把圖片分成兩行三列。

還有另外一種更為厲害的分屏:

# One figure in row 1 and two figures in row 2
attach(mtcars)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)

這裡寫圖片描述

這是我曾經最喜歡的一個多圖函式,其中的設定都是再layout裡邊的matrix,裡邊你可以無限多地設定函式,每一張圖可以通過數字連起來,這樣就可以做出各種形狀的組合圖形。

相關推薦

R教程-10R語言繪圖基礎

R語言最強大的一點就是畫圖,那個無比強大的畫圖系統,再加上各種各樣的神級R包,讓我寫R語言中最喜歡的一點就是寫繪圖程式碼。 簡單來說,R語言原生的繪圖系統已經非常強大了,根本不需要其他東西的輔助,就可以繪製非常炫目的圖片,需要的僅僅是耐心。另外R語言還有一系列

R教程-3R及RStudio的安裝

說到R語言的安裝,再Windows平臺上是很簡單的。但是再Linux平臺上簡直就是一場噩夢……尤其是針對最新的R3.4等版本,每一次安裝R能夠在2小時內弄完,我就覺得是一個成功了。 額外提一句,現在Microsoft開發了一種效率更高的R語言,叫做Mic

R教程-1資料分析前景

這是我自己寫的一個教程,是我幾年來用R語言的一些經驗整理,寫的不好,有些觀點可能也不對,有些技術用的可能也不好。如果有問題,還請理性提出。 資料分析之我見 資料分析是一個久已有之的行當了,最早出現的地方,應該是可能是在幾百年前的科學領域,絕大多數的科

自制 os 教程1寫一個作業系統有多難

為什麼叫極簡教程呢?聽我慢慢說 不知道正在閱讀本文的你,是否是因為想自己動手寫一個作業系統。我覺得可能每個程式設計師都有個作業系統夢,或許是想親自動手寫出來一個,或許是想徹底吃透作業系統的知識。不論是為了滿足程式設計師們自帶的成就感,還是為了面試找工作時能更深入地和麵試官探討(裝逼)。 ## 寫一個作業系

Kotlin教程10章 Kotlin與Java互操作

Kotlin is 100% interoperable with Java™ and Android™ 在前面的章節中,我們已經學習了Kotlin的基礎語法、型別系統、泛型與集合類、面向物件與函數語言程式設計等主題,在上一章中我們還看到了Kotlin

MemCached學習筆記之一 入門教程

權宣告:本文為博主原創文章,轉載註明出處。歡迎指點評論,技術交流,個人郵箱[email protected] https://blog.csdn.net/kangvcar/article/details/78591899 MemCache 概述 MemCache雖然被稱為”分散式快

基於硬體的C(C++)語言程式設計教程10運輸公司計算運費

本系列文章希望探討以硬體為平臺講述C(C++)知識的一個新的途徑,改變目前大多數C語言教程僅注重C語言本身的語法規則,而脫離其應用環境的現狀。希望讀者通過本教程的學習,能夠立刻學以致用,真正將所學知識應用到專案實踐中。 開發環境:Atmel Studio 7.0 硬體平臺:Microch

Python教程之八網路爬蟲入門

讀取網頁 下載後使用gbk解碼。 import urllib2 url = 'http://www.domain.com/domestic' # download resp = urllib2.urlopen(url).read() # decode resp = resp.dec

Python教程之七資料格式化(format)

自 python 2.6 開始,新增了一種格式化字串的函式str.format(),可謂威力十足。那麼,他跟之前的%型格式化字串相比,有什麼優越的存在呢?讓我們來揭開它羞答答的面紗。 #語法 它通過{}和:來代替%。 位置 '{0},{1}'.format('kzc',18) # k

Python教程之六集合之排序(sorted)

python集合的排序主要使用cmp關鍵字來定義比對函式,以下針對幾個較為典型的型別列舉出對應的方法: 正序排列 普通一維陣列(數值、字串陣列) num = sorted(num) 物件陣列(需要指定欄位排序) cursor = sorted(cursor, cmp=l

Kotlin教程第7章 面向物件程式設計

在前面的章節中,我們學習了Kotlin的語言基礎知識、型別系統、集合類以及泛型相關的知識。在本章節以及下一章中,我們將一起來學習Kotlin對面向物件程式設計以及函數語言程式設計的支援。 7.1 面向物件程式設計思想 7.1.1 一切皆是對映 《易

程式碼神器Lombok使用教程

Lombok 是一個非常神奇的 java 類庫,會利用註解自動生成 java Bean 中煩人的 Getter、Setter,還能自動生成 logger、ToString、HashCode、Builder 等 java特色的函式或是符合設計模式的函式,能夠讓你 java Bean 更簡潔,更美觀。 lomb

教程設置3ds Max 2016中文界面

3ds Max 2016中文界面 如果想要3ds Max 2016界面顯示為中文,知道要怎麽操作麽?其實3ds Max 2016是一款支持多種語言的軟件包,即便您在安裝的時候沒有選擇相對應的語言,它也同時會把7中語言安裝到您的電腦,其中包括簡體中文,但是軟件默認打開的是英文界面。此時您可以根據需要

Docker教程 【進階】

原文連結:https://www.javazhiyin.com/20513.html 1. DockerFile建立映象 建立檔案Dockerfile檔案,該檔名不可更改 vi Dockerfile 寫入文字 FROM alpine:latest MAINT

Docker教程【初識】

開頭安利一個Java方向的學習群:歡迎加入 Java知音三千人的社群:696209224 Docker 是一個開源的應用容器引擎,基於 Go 語言] 並遵從Apache2.0協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行

Linux環境中,GitHub的配置使用教程

一.環境 1.1 作業系統(其他發行版亦可): [[email protected] ~]# cat /etc/centos-release CentOS Linux release 7.5.1804 (Core) 1.2 Git版本: [[email

tensorflow基本教程10RNN迴圈神經網路對於手寫體識別預測

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #this is data mnist=input_data.read_data_sets("MNIST_data",one_

超詳細 Nginx 教程,傻瓜一看也會!

什麼是Nginx? Nginx (engine x) 是一款輕量級的Web 伺服器 、反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。 什麼是反向代理? 反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從

超詳細 Nginx 教程

什麼是Nginx? Nginx (engine x) 是一款輕量級的Web 伺服器 、反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。 什麼是反向代理? 反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服

Nginx 教程

                                          &nb