可視化:ggplot2包、lattice包、rCharts包
本章概要:文章內容講解了兩個繪圖包,lattice包和ggplot2包,以及怎樣如何進行互動式圖型的rCharts包。每個內容我會列舉一個案例,當然不可能學習完繪圖包中的所有內容和使用互動式圖形的全部方法,我會列舉一種我認為簡單和適用的互動式圖形的方法和使用包的大致思路。
一、lattice包
此包受歡迎是因為它能夠繪製網路圖形,網格圖形能夠展示變數的分布或變數之間的關係,每幅圖代表一個或多個變數的各個水平。
library(lattice)str(Titanic)barchart(Titanic)barchart(Titanic,layout=c(4,1),auto.key=TRUE)#添加圖例barchart(Titanic,layout=c(4,1),auto.key=TRUE,scales=list(x="free"))#調整刻度
通過選擇lattice包中不同的函數和函數表達式,設定函數選項來展示出你想要的圖形。
在一個或多個其他變數的條件下,網路圖形可以展示某個變數的分布與其他變數間的關係。
二、ggplot2包
1、data載入數據、aes坐標軸的變數、geom創建點、線、條、箱線圖、陰影區域、point點、smooth線、lab橫軸、縱軸、標題名稱,添加的每一個元素都有他的參數。
library(ggplot2)ggplot(data=mtcars, aes(x=wt, y=mpg)) + geom_point(pch=17, color="blue", size=2) + geom_smooth(method="lm", color="red", linetype=2) + labs(title="Automobile Data", x="Weight", y="Miles Per Gallon")
2、分組繪圖,在一個圖形中展示兩組或多組觀察結果。
#將數據集中的變數轉換成因子data(mtcars)mtcars$am <- factor(mtcars$am, levels=c(0,1), labels=c("Automatic", "Manual"))mtcars$vs <- factor(mtcars$vs, levels=c(0,1), labels=c("V-Engine", "Straight Engine"))mtcars$cyl <- factor(mtcars$cyl) #繪製分組圖library(ggplot2)ggplot(data=mtcars, aes(x=hp, y=mpg, shape=cyl, color=cyl)) + geom_point(size=3) + facet_grid(am~vs) + labs(title="Automobile Data by Engine Type", x="Horsepower", y="Miles Per Gallon")
3、geom_圖形類型可以繪製出你想要的任意圖形,每個圖形都有自己的參數。
例如:
data(singer, package="lattice")ggplot(singer, aes(x=height)) + geom_histogram()ggplot(singer, aes(x=voice.part, y=height)) + geom_boxplot()
示例:
data(Salaries, package="car")library(ggplot2)ggplot(Salaries, aes(x=rank, y=salary)) + geom_boxplot(fill="cornflowerblue", color="black", notch=TRUE)+ geom_point(position="jitter", color="blue", alpha=.5)+ geom_rug(side="l", color="black")
從此圖中可以看到三種職位工資的高低、工資方差和異常點。
圖形組合:你可以結合任何你想組合的圖形已達到更加清晰的展現信息的圖形。
library(ggplot2)data(singer, package="lattice")ggplot(singer, aes(x=voice.part, y=height)) + geom_violin(fill="lightblue") + geom_boxplot(fill="lightgreen", width_=.2)
4、分組
aes()函數負責分配變數。
data(Salaries, package="car")library(ggplot2)ggplot(data=Salaries, aes(x=salary, fill=rank)) + geom_density(alpha=.3)
分多組
ggplot(Salaries, aes(x=yrs.since.phd, y=salary, color=rank, shape=sex)) + geom_point()
參數position的展示:
y軸數量是錯誤的,應該是比例,通過y="proportion"參數到labs()函數來解決。
5、刻面
前面學習的分組是將變數間的關係組合到一副圖中,尚若你想將圖形分別展示出來,可以使用一下參數。
例如:
data(singer, package="lattice")library(ggplot2) ggplot(data=singer, aes(x=height)) + geom_histogram() + facet_wrap(~voice.part, nrow=4)
library(ggplot2)ggplot(Salaries, aes(x=yrs.since.phd, y=salary, color=rank, shape=rank)) + geom_point() + facet_grid(.~sex)
6、添加光滑曲線
data(Salaries, package="car")library(ggplot2)ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary)) + geom_smooth() + geom_point()
按性別擬合二次多項式回歸:
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary, linetype=sex, shape=sex, color=sex)) + geom_smooth(method=lm, formula=y~poly(x,2), se=FALSE, size=1) + geom_point(size=2)
7、修改ggplot2圖形的外觀
1、坐標軸
scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"), labels=c("Assistant
Professor", "Associate
Professor", "Full
Professor")) + scale_y_continuous(breaks=c(50000, 100000, 150000, 200000), labels=c("$50K", "$100K", "$150K", "$200K"))
2、圖例
通常能自動生成圖例,但你也可以自己設置,比如選擇位置和圖例大小,如果想刪除圖例,可以legend.position="none"。當更改圖例的標題時,可以通過將fill="mytitle"加到labs()函數中來改變標題。
labs(title="Faculty Salary by Rank andGender",x="", y="",fill="Gender") +theme(legend.position=c(.1,.8))
3、標尺
scale_fill_brewer()函數來預先指定分得清的顏色集。
4、主題
theme()函數中的選項可以讓我們調整字體、背景、顏色和網格線等。主題可以使用一次,
也可以保存起來應用到多個圖中。
5、多重圖
多重圖的使用方法與基礎安裝包中的方法不同,他需要重新安裝軟體包。
install.packages("gridExtra")data(Salaries, package="car")library(ggplot2)p1 <- ggplot(data=Salaries, aes(x=rank)) + geom_bar()p2 <- ggplot(data=Salaries, aes(x=sex)) + geom_bar()p3 <- ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary)) + geom_point()library(gridExtra)grid.arrange(p1, p2, p3, ncol=3)
8、保存圖形
ggplot(data=mtcars, aes(x=mpg)) + geom_histogram()ggsave(file="mygraph.pdf")
三、互動式圖形(rCharts包)
互動式圖形的方式有很多,但這次只學習一種。
首先不能直接在R中安裝,安裝步驟如下:
require(devtools)install_github("rCharts", "ramnathv")
案例:
library(rCharts)names(iris) = gsub("\.", "", names(iris))rPlot(SepalLength ~ SepalWidth | Species, data = iris, color = "Species", type = "point")
此代碼生成的圖片由於是互動式的,以此無法用圖片的形式保存。
案例2:
hair_eye = as.data.frame(HairEyeColor)rPlot(Freq ~ Hair | Eye, color = "Eye", data = hair_eye, type = "bar")
案例3:
hair_eye_male <- subset(as.data.frame(HairEyeColor), Sex == "Male")n1 <- nPlot(Freq ~ Hair, group = "Eye", data = hair_eye_male, type = "multiBarChart") n1
執行以上代碼會出現精彩的結果。
如何對上述結果呈現給他人,這裡牽涉到shiny包,具體如何操作我還沒有學會。
推薦閱讀:
※【數據分析·實戰】北京的霧霾是大風吹走的嗎
※R語言可視化學習筆記之添加p-value和顯著性標記
※左手用R右手Python系列——任務進度管理