ggplot2是一款強大的圖形可視化R包,其作圖方式易於理解,且生成的圖形精美,定製化程度也很高,應該是R裡面最流行的可視化工具。本文關注於ggplot2包的安裝、ggplot2基本作圖語法等。
一 ggplot2的安裝
> install.packages("ggplot2")
#以上代碼也可以直接用install.packages("ggplot2",lib=""~/R/lib"")代替,這樣就只是把包安裝到路徑中,並不會載入路徑,
#不過後續載入包就找不到路徑了,需要在library的時候指定路徑載入ggplot2包,進行基礎繪圖,現在就用ggplot2自帶的數據集激進型測試,mgp數據集的描述:Fuel economy data from 1999 and 2008 for 38 popular models of car(美國1999年到2008年38種流行汽車的能源使用數據),資料庫詳細說明可參考
https://www.rdocumentation.org/packages/ggplot2/versions/3.0.0/topics/mpg
> library(ggplot2, lib.loc=""~/R/lib"") #如若ggplot2包安裝在其它路徑,就用lib.loc指定此路徑,如在默認路徑就不需要設置此參數> mpg #mpg數據集如下# A tibble: 234 x 11manufacturer model displ year cyl trans drv cty hwy fl class<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>1 audi a4 1.80 1999 4 auto(l… f 18 29 p comp…2 audi a4 1.80 1999 4 manual… f 21 29 p comp…3 audi a4 2.00 2008 4 manual… f 20 31 p comp…4 audi a4 2.00 2008 4 auto(a… f 21 30 p comp…5 audi a4 2.80 1999 6 auto(l… f 16 26 p comp…6 audi a4 2.80 1999 6 manual… f 18 26 p comp…7 audi a4 3.10 2008 6 auto(a… f 18 27 p comp…8 audi a4 qua… 1.80 1999 4 manual… 4 18 26 p comp…9 audi a4 qua… 1.80 1999 4 auto(l… 4 16 25 p comp…10 audi a4 qua… 2.00 2008 4 manual… 4 20 28 p comp…
下面來繪製一個簡單的圖形-散點圖,但是出現了報錯,說是沒有png supoort,用capiabilities()可查看支持的圖片類型,此時需要安裝Cairo包來支持,安裝方法見 https://www.cairographics.org/download/。首先在bash界面種安裝Cairo需要的dev庫文件,然後進入R安裝Cairo即可。
> p <- ggplot(mpg,aes(x=hwy,y=cty)) + geom_point(aes(color=cyl)) + geom_smooth(method="lm")> ggsave(filename="point.png",plot=p)> capabilities()jpeg png tiff tcltk X11 aqua TRUE TRUE TRUE TRUE FALSE FALSE http/ftp sockets libxml fifo cledit iconv TRUE TRUE TRUE TRUE TRUE TRUE NLS profmem cairo ICU long.double libcurl TRUE FALSE TRUE TRUE TRUE$ sudo apt-get install libcairo2-dev #For Debian and Debian derivatives including Ubuntu
$ sudo yum install cairo-devel #For Fedora
$ zypper install cairo-devel #For openSUSE
> install.packages("Cairo")
> ggplot(mpg,aes(x=hwy,y=cty)) + geom_point(aes(color=cyl),size=2) #這裡的ggsave保存步驟就神略了,後面也一樣
ggplot(mpg,aes(hwy,cty)) + geom_point(aes(color=cyl)),這是一般繪圖語法,也可以寫成ggplot(mpg) + geom_point(aes(hwy,cty,color=cyl)),aes表示進行數據映射,aes括號外面的參數表示直接賦值(與數據沒有關係了),其中hwy映射到圖上是x軸數據,cty映射到y軸上,cyl映射到顏色屬性,圖上每一個點的三重屬性都得到展示了,一般輸入的坐標軸屬性有1~3個,如只用1個坐標軸屬性值就可畫直方圖,一般畫圖是兩個屬性,在3D圖種會用到3個坐標軸屬性值,而除了映射到坐標軸的屬性值之外,其它的屬性如顏色、大寫、標記、填充、分面等可以自由設置。
上圖是典型的散點圖,cyl設置了點的顏色屬性,由於cyl是數值,所以就當成了連續變量,映射到顏色屬性之後也成了連續的顏色,由於cyl就只有幾類數據,可以按照離散變量來設置。
aes裡面設置的變量都需要有數據映射,如果沒有數據映射直接設置成定值,可在aes外設置,如下設置點的大小。
ggplot(mpg,aes(x=hwy,y=cty)) + geom_point(aes(color=factor(cyl)),size=0.5)除了geom_point()繪畫點圖之外,還有很多圖形可以繪製,並且可以通過調節參數繪製很多子圖形,以下列舉幾種常見圖形。
geom_line() 折線圖
geom_bar() 圖形圖
geom_histogram() 直方圖
geom_boxplot() 箱線圖
geom_density() 密度函數分布圖
geom_area() 面積圖,覆蓋數據以下的所有區域。
由於ggplot2幾何圖形都是geom_xxx形式,所以可以在R種列出所有的繪圖類型
> library(ggplot2)> ls("package:ggplot2", pattern="^geom_.+")[1] "geom_abline" "geom_area" "geom_bar" "geom_bin2d" [5] "geom_blank" "geom_boxplot" "geom_col" "geom_contour" [9] "geom_count" "geom_crossbar" "geom_curve" "geom_density" [13] "geom_density_2d" "geom_density2d" "geom_dotplot" "geom_errorbar" [17] "geom_errorbarh" "geom_freqpoly" "geom_hex" "geom_histogram" [21] "geom_hline" "geom_jitter" "geom_label" "geom_line" [25] "geom_linerange" "geom_map" "geom_path" "geom_point" [29] "geom_pointrange" "geom_polygon" "geom_qq" "geom_quantile" [33] "geom_raster" "geom_rect" "geom_ribbon" "geom_rug" [37] "geom_segment" "geom_smooth" "geom_spoke" "geom_step" [41] "geom_text" "geom_tile" "geom_violin" "geom_vline"ggplot2在繪圖的時候內部進行統計分析,每種幾何圖形都有默認的統計變換類型,統計變換用stat_xxx形式
> library(ggplot2)> ls("package:ggplot2",pattern="stat_.+")[1] "stat_bin" "stat_bin_2d" "stat_bin_hex" [4] "stat_bin2d" "stat_binhex" "stat_boxplot" [7] "stat_contour" "stat_count" "stat_density" [10] "stat_density_2d" "stat_density2d" "stat_ecdf" [13] "stat_ellipse" "stat_function" "stat_identity" [16] "stat_qq" "stat_quantile" "stat_smooth" [19] "stat_spoke" "stat_sum" "stat_summary" [22] "stat_summary_2d" "stat_summary_bin" "stat_summary_hex" [25] "stat_summary2d" "stat_unique" "stat_ydensity" [28] "update_stat_defaults"本文來源:https://mp.csdn.net/postedit/82914819
BioMan主要報導生命科學領域熱點資訊、解讀前沿進展、分享科研資料。我們組建了10餘個交流群,歡迎大家進群交流。添加公眾號博主微信:mBioMan(下方二維碼),邀你進群。溫馨提示:添加管理員時,請備註一下研究方向+單位/學校!