R語言視覺化作圖筆記(1)
阿新 • • 發佈:2018-11-04
R語言ggplot2與plotly的基本介紹
ggplot2
以R包自帶的資料mpg為例
library(ggplot2)
data0 <- mpg
ggplot(data = data0,mapping = aes(x=displ))+
geom_density() # 密度圖
## 另一種形式
# ggplot()+geom_density(data = data0,mapping = aes(x=displ))
這裡ggplot
提供整張圖最下面的圖層,幷包含了一個名叫data0的引數data(data.frame型別)。函式aes
函式
geom_density
是第二個圖層,如果此函式中不輸入新的data和mapping,則此圖層的相關輸入都繼承自底層。這裡我們將data0$displ(可簡寫為displ)作為密度圖的x顯示出來,圖如下:為了美觀,我們也可以作其他修改。這裡的fill(影象顏色),color(線顏色),size(線粗細)是對於
geom_density
繪圖屬性的修改,不是資料的對映屬性,固寫在aes
外面。
ggplot(data = data0)+ geom_density(aes(x=displ),fill="cornsilk", color="grey60", size=1.2)
如果我們想要在原有圖上繼續新增新的圖層,可以繼續用+
連線圖層。這裡我們加入含有data1的散點圖geom_point
,由於輸入了新的data和mapping,所以不再使用之前的引數。
data1 <- data.frame(x = c(1,4,6),y = c(0.1,0.03,0.02)) # x y # 1 1 0.01 # 2 4 0.03 # 3 6 0.02 ggplot(data = data0)+ geom_density(aes(x=displ),fill="cornsilk", colour="grey60", size=1.2)+ geom_point(data = data1,aes(x=x,y=y))
當我們要展示多幅圖時,可以用到gridExtra::arrangeGrob
以及ggplot2::aes_string
。藉助lapply
,生成不同x的密度圖
(arrangeGrob
會自動排圖)
library(gridExtra)
colnames <- colnames(mpg)[c(3,8,9)]
f <- function(colname){
ggplot(mpg, aes_string(x=colname))+
geom_density(fill="cornsilk", color="grey40", size=.3)
}
plot(arrangeGrob(grobs=lapply(colnames, f)))
下面來畫散點圖。這裡的color是data所要對映的屬性之一,寫在aes
裡。ggtitle
,scale_x_continuous
等是設定座標的函式,是最上端的圖層。根據需要,中間可以為x,y,color,fill,shape等,後面為discrete,continuous,manual等。
p <- ggplot(mpg, aes(x=displ, y=hwy,color = cyl)) +
geom_point() +
ggtitle("Figure: mpg") +
scale_x_continuous(name ="x.displ") +
scale_y_continuous(name = "y.hwy") +
scale_colour_continuous(name = "cl.cyl")
plotly
最後我們試著用plotly作圖。一種方法是直接用函式plotly::ggplotly
將ggplot2
圖轉化為plotly
圖。
library(plotly)
ggplotly(p)
另一種方法是依照plotly
提供的繪圖思路Data-plot pipeline,其特點是用%>%
來連線資料,圖層(繪圖),座標等,類似於+
之於ggplot
。 add_trace
是通用的加圖方式,type是需要的圖片型別,symbol是點的形狀,亦可用特殊化的add_markers
替換。
pp <- plot_ly(x = ~mpg$displ, type = "histogram")
add_markers(pp, x= ~c(1,3,5), y=~c(10,20,30),
symbol= I(4)) %>%
add_trace(pp, x= ~c(2,4,6), y=~c(10,20,30),
type = "scatter", symbol= I(5),
mode="markers") %>%
layout( title="Histogram", xaxis = list(title = "x.displ"),
yaxis=list(title= "y"))
其他
筆者沒怎麼用過Photoshop,但玩過RPG maker,用地圖編輯器的解釋ggplot2的繪圖思路就是:
ggplot
提供一張地圖的地面geom_XXX
提供了地圖上的河流,樹木分佈,山勢地形layout
是地圖天上飛的雲
【hhh 僅供參考】