1. 程式人生 > 其它 >R視覺化:plot函式基礎操作,小白教程

R視覺化:plot函式基礎操作,小白教程

最近迷戀上了畫圖,一方面是覺得挺有意思的,另一方面是覺得自己確實畫圖方面比較弱,所以決定比較系統地回顧反思一下,同時順帶記錄下來分享給大家。也確實是好久好久沒更新文章了,真的是雜事太多太忙太牽扯精力沒法更新,好多粉絲的訊息也都回不了。

還有一個原因就是畫圖這個東西,可以學一點記一點,然後寫一點,碎片化時間可以完全利用起來,寫統計方法的話,是需要大量整塊的時間去思考的,思路斷了下次相連起來就特別困難,所以如果不是特別閒,有大量整塊的時間,感覺我自己也很難寫的出來了。因為太多是精力被牽扯,稍有閒暇時間就只想躺平在床上,哪有心力寫什麼公眾號哦,如今這個氛圍世道下,作為一名青年教師,真的很難有整塊時間進行深度工作。

說到深度工作,這兒將深度工作的理念分享給大家,我挺認可這些話的,不過眼前似乎看不到鼓勵深度工作的氛圍:

卡爾·紐波特先生認為,深度工作是在無干擾的狀態下專注進行的職業活動,從而使人的認識能力達到極限。

他認為,深度工作能夠創造新價值,提升技能,而且難以複製。也就是我們常講的心無旁騖和專心致志,是深度工作的精神狀態。

和深度工作相對應,紐波特也提出浮淺工作的概念,他認為,浮淺工作是對認知要求不高的事務性工作,這類工作往往在受干擾的情況下開展,浮淺工作通常不會創造太多的價值,而且容易複製。

深度工作才能創造更高價值,其成果才難以複製,深度工作才能使人有所見樹和獲得成功。紐波特認為,深度工作的能力日益稀少,而深度工作的價值在社會經濟中日益提升。

因此培養深度工作這項技能,將其內化為工作生活核心的人,將會取得成功,這就是為什麼我們要深度工作。在現代社會,無論是經濟生活還是技術進步,都是一個十分複雜的系統,不管我們從事什麼工作,都需要靜下心來,深度學習,深度思考,深度工作。

當前,我們大力提倡工匠精神,我覺得工匠精神的核心就是深度工作。工匠精神必須是一絲不苟,必須是見微知著,必須是持之以恆,而這些特點正是深度工作所必需的。

我常想,我國古代一些巧奪天工的建築藝術,那不僅需要精密的計算和設計,還需要精益求精的建造。那個時代雖然科技並不發達,但工匠們憑著比較單一的知識和經驗,全神貫注地去做,把工作做到了極致。

在當代社會,陳景潤破解歌德巴赫猜想、屠呦呦發明青蒿素靠深度工作,袁隆平培育新稻種靠的也是深度工作。

我們今天提倡深度工作,對於重拾和築牢我國的工匠精神至關重要。

所以今天就只能給大家寫一些比較膚淺的,最最最基礎的作圖函式plot,希望大家不要嫌棄哈。

plot函式常用引數介紹

首先plot函式可以接受一系列的引數,通過引數的組合修改基本上可以畫出你想要的任何圖形,plot可以接受的常見的引數如下:

 

常見的圖形引數的意思,直接拉一張表給大家:

 

表中都是一些很簡單的描述,我相信大家一看就懂,這兒要給大家提的是type,tpye引數可以控制圖的型別,常見的圖的型別一覽如下:

 

比如你要畫一個點圖,就可以寫type='p',要畫一個線圖就可以寫type='l'等等,其餘的type對應的圖的樣子如下圖:

 

就是你只要設定好了x和y的資料,你想畫個啥圖,就將type設定為對應的啥就可以。

還要給大家介紹顏色引數col的表示,col的表示有很多種方法,比如你想要你圖呈紅色,只需要將col引數設定為col="red"就行,那麼當然不止可以設定為紅,R有很多預先設定好的顏色可以供你選擇,你在console中執行colors()就可以看到預設的顏色了,如下:

 

總共其實有657個顏色,這兒我就只截圖了這麼多而已哈。657個顏色如下,可以隨便選:

 

其實顏色的設定還有很多別的方式,比如可以用顏色的index,顏色names,也可以用RGB,也可以用十六進位制表示都行:

 

顏色介紹完了我們再看las引數,軸標籤的style可以用las引數修改,什麼意思呢,就是我們的軸標籤可以選擇是和軸水平,還是一直水平,或者一直垂直。什麼意思呢?大家看這幅圖:

 

可以看到軸標籤都是和軸平行的(y軸的標籤和y軸平行),這個時候我們將y軸的標籤改為水平才更符合我們的讀圖習慣,這個時候我們就可以將las設定為1,得到如下的圖:

 

此時大家再注意縱軸的標籤,可以看到也變為平行分佈了,這個就是las引數的作用。

繼續看bty引數,這個引數是用來改畫圖的框框的,就是說預設我們用plot作圖都會帶一個框框,如下:

 

比如我想要一個無框圖我就可以將bty設定為n,然後就得到效果如下,沒有框框只有軸:

 

plot函式中還有個pch引數是控制點的型別的,取值意義如下,大家也可以換著用用試試:

 

比如我想要我的點是空心菱形,我就可以設定pch=5,就可以得到下面的圖:

 

上圖的完整程式碼如下:

plot(pressure,pch=21,col='#eb280a', bg="lightblue",las=1,
     cex=1,type='p',bty='n'
     )

plot作圖時的圖例操作

我們在一個圖中畫多組物件的時候,這個時候就需要圖例來幫助我們讀圖,比如對下面的圖,這個圖中有兩組資料,但卻沒有圖例,我們不知道三角形和圈圈代表啥:

 

我想加一個圖例,這個時候就需要繼續執行legend函式,比如我想圈圈代表‘關注’,三角代表‘Codewar’,我就可以寫出如下程式碼,這兒的“關注”和“Codewar”你都可以換成你想的任何字元哈,這兒僅用它舉例:

legend(0,800,
       c("關注","Codewar"), pch=c(19,17), col=c("lightblue","blue"))

 

圖例當然也可以改,首先就是改位置,位置的關鍵字有9個,對應的位置如下圖:

 

圖例的位置可以用關鍵字改,也可以更加的個性化,用座標改也是可以的,其可以接受的引數如下圖:

 

比如我想將原來的圖例換成紅色的背景,然後放在(25,800)這個座標上,我就可以寫出如下程式碼:

legend(25,800,
       bg = 'red',
       c("關注","Codewar"), pch=c(19,17), col=c("lightblue","blue"))

執行後得到下圖:

 

大家可以看到一個紅色背景的圖例已經在對應位置加上了,但是仔細觀察上圖,其實我們現在圖是沒有邊框的,這個時候圖例加個邊框也不合適,所以我還想設定下圖例的邊框,甚至我還想改圖例中的字型,甚至圖例整體的大小,甚至是....統統都是可以的哈,就是這麼牛!

比如,我現在突發奇想,我想給我的圖例加一個標題,再將其變小一點,放在右下角,並且讓圖例中的字水平排列,我就可以寫出如下程式碼:

legend("bottomright", title="歡迎大家",
       c("關注","Codewar"),col=c("lightblue","blue"), horiz=TRUE, cex=0.4,
       box.lty=0,
       bg = 'red',
       text.font=4
       )

 

依然是給大家解釋下上面程式碼中各個引數的意思:bottomright是圖例位置的關鍵字,title是標題字元,horiz是圖例內容水平排列,cex是圖例整體大小,box.lty是圖例邊框(取0就是無框),text.font是字型(取4就是斜體)。大家可以嘗試著改改上面的引數自己試試呀。

例項操練

比如我給一位同學做了個軌跡模型,這個模型本身是用plot函式輸出的,預設輸出的影象如下:

 

我此時想將這個圖參照已經發表的一篇文獻,改一改,大概改成下面這個樣子:

 

我們先觀察一下需要改動的地方,首先就是圖的邊框,之前給大家寫了邊框可以用bty引數改;然後是橫軸的標籤,這個可以用axis改,並且需要將標籤改為始終水平放置(使用las引數);然後就是圖例了,圖例需要放在整幅圖的下面,可以用legend函式改。

我們就來實操一下:執行下面程式碼

plot(plotpred, lty=1, lwd=5, shades=T,
     xlab="Time",
     ylab="PTG", 
     bty='l',
     las=1,
     cex=0.75,legend = NULL)
axis(side=1, at=c(0,0.5,1,1.5,2), labels = c('2001','2002','2003','2004','2005'))
legend("bottom",
       legend = c('Low','Moderate','High'),
       col = c(2,1,3),
         lty=1, lwd=5,
       horiz = T,
       seg.len=6,
       bty='n',
       xpd = T,inset=-0.25)

執行上面的程式碼即可得到下圖,效果基本上和發表的文獻已經一致了,放在論文中肯定也是沒問題的:

 

上面的程式碼中axis是對圖形座標軸進行重新設定,side引數的可以取4個值,side=1的意思是below,就是下面這個軸,對下面這個軸進行操作,at引數可以設定軸標籤的位置,此時寫了5個位置,相應地labels就是軸標籤,即在at的5個位置上標籤分別為2001-2005年。還有legend函式中,需要提示一下的就是xpd引數,這個引數為TRUE就表示允許在原圖外進行繪製,此時就表示我在原圖外,也就是原圖的下方新增圖例。

以上例項就是這樣。

小結

今天給大家寫了一些基礎包中plot作圖設定的基礎知識點,感謝大家耐心看完,自己的文章都寫的很細,重要程式碼都在原文中,希望大家都可以自己做一做,請轉發本文到朋友圈後私信回覆“資料鏈接”獲取所有資料和本人收集的學習資料。如果對您有用請先記得收藏,再點贊分享。

也歡迎大家的意見和建議,大家想了解什麼統計方法都可以在文章下留言,說不定我看見了就會給你寫教程哦,有疑問歡迎私信,有合作意向請直接滴滴我。