ggplot2
R的作圖工具包,可以使用非常簡單的語句實現非常復雜漂亮的效果。
qplot
加載qplot
library(ggplot2) # 測試數據集,ggplot2內置的鉆石數據 qplot(carat, price, data = diamonds) dsmall <- diamonds[sample(nrow(diamonds), 100), ] #對diamonds數據集進行抽樣
#1. 按color,size,shape的基本分類可視化
#1.1 簡單的散點圖(利用color分類,不同顏色的鉆石由不同顏色的點代表)
#1.2. 簡單的散點圖(利用shape分類,不同的切割方式由不同形狀的點代表)
#2. 繪制不同類型的圖表:geom參數
qplot(x,y,data=data,geom="")中的geom=""用來控制輸出的圖形類型
I. 兩變量圖
(1) geom="points",默認參數,繪制散點圖(x,y)
(2) geom="smooth" 繪制平滑曲線(基于loess, gam, lm ,rlm,glm)
(3) geom="boxplot" 繪制箱線圖 ,當x為屬性變量(factor),y為數值變量時
II.單變量圖
(4) geom="histogram",直方圖
(5) geom="density",核密度估計圖
(6) geom="bar",條形圖barchart
III.時間序列
(7) geom="line",折線圖,可用于時間序列(當x=date)
(8) geom="path",路徑圖(參見后文)
# 2.1 同時繪制散點圖+平滑直線
qplot(carat, price, data = dsmall, geom=c("point","smooth"))
#參數調整:method=""等
#(a). method = "loess", 默認平滑算法, 通過span=調整窗寬, span=0(波動) 到 span=1(光滑)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
method = "loess",span=0.2)
# (b). method = "gam": GAM 在大數據時比loess高效,需要載入 mgcv 包
library(mgcv) qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method="gam", formula = y ~ s(x))
# (c). method="lm", 線性平滑
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
method = "lm")
# method="lm",formula = y ~ ns(x, 3),三次自然樣條,需要載入splines包
library(splines) qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "lm", formula = y ~ ns(x, 3))
# method = "rlm", robust linear model, 受異常值影響小,需要載入MASS包
library(MASS) qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "rlm")
# 2.2:x為屬性變量,y為連續變量,繪制boxplot
qplot(color, price/carat, data=diamonds,geom="boxplot")
# 2.3:單變量,直方圖
qplot(carat, data = diamonds, geom = "histogram")
#2.4: 單變量,核密度估計圖
qplot(carat, data = diamonds, geom = "density")
# 按不同顏色繪制的density圖
qplot(carat, data = diamonds, geom = "density",colour=color)
# 2.5 條形圖(柱狀圖)
#計數,求count(color)
qplot(color, data = diamonds, geom = "bar")
#加權,對每個求sum(carat),類似于excel里的數據透視圖,按不同的color計算carat的總和
qplot(color, data = diamonds, geom = "bar", weight = carat)
#2.6. Time-series
qplot(date, unemploy / pop, data = economics, geom = "line")
#2.7. Path plot
#如果要查看失業率(unemploy / pop)與平均失業時間(uempmed)之間的關系,一個方法是利用散點圖,但是這樣做就會導致無法觀察到隨時間變化的趨勢了,path plot利用顏色深淺來代表年份,隨著顏色從淺藍變成深藍,可以觀察到失業率與失業時間的關系的變化趨勢。
#具體實現:先自定義函數year(),將字符串格式的時間轉化為年 year <- function(x) as.POSIXlt(x)$year + 1900 #畫出path plot,顏色按年份由淺到深 qplot(unemploy / pop, uempmed, data = economics, geom = "path", colour = year(date))
我們已經討論了如何利用外觀參數在同一圖中比較不同分類的差異。而分面可以將不同的亞類放在不同的圖中進行比較:
qplot(carat, data = diamonds, facets = color ~ .,geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
qplot(carat, data = diamonds, facets = color ~ .,geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
下面的圖形在一開始的基礎上添加了新的元素:分面,多個圖層以及統計數據。分面和圖層擴展了上面提到的數據結構:每一個分面的每一個圖層都有屬于自己的數據集。你可以將它想象成是一個三維的數組:分面構成了二維平面,然后圖層給予其在新的維度上的擴展。在這個例子中,不同圖層上的數據是一樣的,但是從理論上來講,不同的圖層中可以有不同的數據。
qplot(displ, hwy, data=mpg, facets = . ~ year) + geom_smooth()
ggplot
基本繪圖類型:
這些幾何元素是ggplot的基礎。他們彼此結合可以構成復雜的圖像。他們中的絕大多數對應特定的繪圖類型。
geom_area()
geom_bar()
geom_line()
geom_point()
geom_polygon()
geom_text()
geom_tile()
> library("ggplot2") > head(mpg) manufacturer model displ year cyl trans drv cty 1 audi a4 1.8 1999 4 auto(l5) f 18 2 audi a4 1.8 1999 4 manual(m5) f 21 3 audi a4 2.0 2008 4 manual(m6) f 20 4 audi a4 2.0 2008 4 auto(av) f 21 5 audi a4 2.8 1999 6 auto(l5) f 16 6 audi a4 2.8 1999 6 manual(m5) f 18 hwy fl class 1 29 p compact 2 29 p compact 3 31 p compact 4 30 p compact 5 26 p compact 6 26 p compact > p <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(year))) > summary(p) data: manufacturer, model, displ, year, cyl, trans, drv, cty, hwy, fl, class [234x11] mapping: x = cty, y = hwy, colour = factor(year) faceting: facet_null()
然后就是幾何對象和統計,簡單的理解就是通過統計變換把前面的元素表現出來,因為統計變換的函數stat開頭的默認有包含自己的幾何圖形,而幾何圖形函數geom又帶有自己的統計變換,通常都能達到目的。
p + geom_point() #散點圖
ggplot(mpg, aes(x = displ)) + geom_histogram(aes(y = (..count..)), fill = "steelblue", colour = "#808080", bin = 0.1) #直方圖
ggplot(mpg, aes(y = displ, x = factor(cyl), fill = factor(cyl))) + geom_boxplot() #盒圖
ggplot(diamonds, aes(carat, price)) + stat_bin2d() #二維密度圖
p + geom_point() + stat_smooth(method = "lm", se = F)
ggplot(mpg, aes(x = cty, y = hwy)) + geom_point(aes(colour = factor(year))) + stat_smooth(method = "lm", se = F) #請注意兩種方式的區別
ggplot(mpg, aes(y = hwy, x = class, colour = class)) + geom_boxplot() + geom_jitter(alpha = 0.3) + theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, colour = "black"))
ggplot(mpg, aes(x = displ)) + stat_bin(aes(y = ..density.., fill = factor(year)), colour = "#909090") + stat_density(aes(ymax = "density", colour = factor(year)), geom = "line", size = 1.2) + facet_wrap(~year, ncol = 1)
ggplot2中的基本概念
將數據中變量映射到圖形屬性。映射控制了二者之間的關系。
標度:標度負責控制映射后圖形屬性的顯示方式。具體形式上來看是圖例和坐標刻度。scale和mapping是緊密相關的概念。
幾何對象(Geometric):幾何對象代表我們圖中看到的圖形元素,如點、線、多邊形等。
統計變換(Statistics):對原始數據進行某種計算,例如二元散點上加上一條回歸線。
坐標系統(Coordinate):坐標系統控制坐標軸并影響所有圖形元素,坐標軸可以進行變換以滿足不同的需要。
圖層(Layer):數據、映射、幾何對象、統計變換等構成一個圖層。圖層可以允許用戶一步步的構建圖形,方便單獨對圖層進行修改。
分面(Facet):條件繪圖,將數據按某種方式分組,然后分別繪圖。分面就是控制分組繪圖的方法和排列形式。
總結
關于ggplot2的繪圖功能還有待進一步挖掘。
文章列表