1. 程式人生 > >R語言視覺化作圖筆記(1)

R語言視覺化作圖筆記(1)

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

象徵的對映引數mapping,其作用是將data按照使用者的設定對映到當前的圖層上,即要如何顯示資料。
函式geom_density是第二個圖層,如果此函式中不輸入新的datamapping,則此圖層的相關輸入都繼承自底層。這裡我們將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,由於輸入了新的datamapping,所以不再使用之前的引數。

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)))

在這裡插入圖片描述
下面來畫散點圖。這裡的colordata所要對映的屬性之一,寫在aes裡。ggtitle,scale_x_continuous等是設定座標的函式,是最上端的圖層。根據需要,中間可以為x,y,color,fillshape等,後面為discretecontinuousmanual等。

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::ggplotlyggplot2圖轉化為plotly圖。

library(plotly)
ggplotly(p)

另一種方法是依照plotly提供的繪圖思路Data-plot pipeline,其特點是用%>%來連線資料,圖層(繪圖),座標等,類似於+之於ggplotadd_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 僅供參考】