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)
讓我們來細看一下text
函式的引數,x代表了橫座標,我這裡寫的是4,就是說希望寫再以第四個bar為中心的位置。y代表了高度,我寫的也是4,labels就是想要寫的話,可以把任何的字串嵌進來,最後一個引數是cex,這個是控制字型大小,1是預設值,如果你希望字型放大一倍,就設定為2.
根據我的經驗,想要一次性畫對圖還是有難度的,最好還是多嘗試幾次。調調位置,換換
x
和y
。慢慢就可以把圖做出來。
點、線
點和線是很基礎的元素,點的函式是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極簡教程-10:R語言繪圖基礎
R語言最強大的一點就是畫圖,那個無比強大的畫圖系統,再加上各種各樣的神級R包,讓我寫R語言中最喜歡的一點就是寫繪圖程式碼。 簡單來說,R語言原生的繪圖系統已經非常強大了,根本不需要其他東西的輔助,就可以繪製非常炫目的圖片,需要的僅僅是耐心。另外R語言還有一系列
R極簡教程-3:R及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基本教程10:RNN迴圈神經網路對於手寫體識別預測
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