第四篇:R語言資料視覺化之折線圖、堆積圖、堆積面積圖

穆晨發表於2016-04-13

折線圖簡介

        折線圖通常用來對兩個連續變數的依存關係進行視覺化,其中橫軸很多時候是時間軸。

        但橫軸也不一定是連續型變數,可以是有序的離散型變數。

繪製基本折線圖

        本例選用如下測試資料集:

        繪製方法是首先呼叫ggplot函式選定資料集,並在aes引數中指明橫軸縱軸。然後呼叫條形圖函式geom_line()便可繪製出基本折線圖。R語言示例程式碼如下:

# 基函式
ggplot(BOD, aes(x = Time, y = demand)) +
  # 折線圖函式
  geom_line()

     執行結果:

向折線圖新增資料標記

        本例選用如下測試資料集:

        如果要把資料集中的各樣本點在折線圖中標記出來只需在原來基礎上增加一個散點圖圖層(geom_line())。R語言實現程式碼如下:

# 基函式
ggplot(BOD, aes(x = Time, y = demand)) +
  # 折線圖函式
  geom_line() +
  # 散點圖函式
  geom_point()

        執行結果:

        如果對標記的樣式不滿意可以通過修改geom_point()的引數進行調整。如可以將標記自定義為粉紅方框,R語言實現程式碼如下:

# 基函式
ggplot(BOD, aes(x = Time, y = demand)) +
  # 折線圖函式
  geom_line() +
  # 散點圖函式:size設定大小,shape設定形狀,colour設定邊框顏色,fill設定填充顏色
  geom_point(size = 4, shape = 22, colour = "darkred", fill = "pink")

        執行結果:

        也可以將標記自定義為白色圓框,R語言實現程式碼如下:

# 基函式
ggplot(BOD, aes(x = Time, y = demand)) +
  # 折線圖函式
  geom_line() +
  # 散點圖函式:size設定大小,shape設定形狀,fill設定填充顏色
  geom_point(size = 4, shape = 21,fill = "white")

        執行效果:

        更多自定義方法請參考函式手冊中geom_point()的說明。

繪製多重摺線圖

        本例選用如下測試資料集:

        繪製方法是在基礎折線圖之上再在基函式的美學引數集裡設定一個美學變數。可指定colour或者linetype兩種引數,分別將不同分組以不同顏色/線型折線表述。R語言示例程式碼如下:

# 基函式:colour設定分組
ggplot(tg, aes(x = dose, y = length, colour = supp)) +
  # 折線圖函式
  geom_line()

        執行結果:

        如果多重摺線圖中做了資料標記處理,那麼不同折線的標記有可能重複。可在繪製函式裡設定position_dodge引數偏置處理。R語言實現程式碼如下:

# 基函式:colour設定分組
ggplot(tg, aes(x = dose, y = length, shape = supp)) +
  # 折線圖函式:position設定偏置項
  geom_line(position = position_dodge(.2)) +
  # 散點圖函式:position設定偏置項
  geom_point(position = position_dodge(.2), size = 4)

        執行結果:

修改線條樣式

        本例選用如下測試資料集:

        繪製方法很簡單,在geom_line()函式裡設定linetype引數即可。R語言示例程式碼如下:

# 基函式
ggplot(BOD, aes(x = Time, y = demand)) +
  # 折線圖函式:linetype設定線形
  geom_line(linetype = "dashed", size = 1, colour = "orange")

        執行效果:

折線圖置信域

        本例選用如下測試資料集:

        繪製方法是呼叫ggplot2的geom_ribbon函式,這個函式能畫出一個"帶"。我們可指定帶的上下邊界為置信區間,從而將折線圖的置信域視覺化出來。測試資料集中Unc10y表示 Anomaly10y 95%置信水平下的置信區間。

        R語言示例程式碼如下:

# 基函式
ggplot(clim, aes(x = Year, Anomaly10y)) +
  # 帶狀圖函式:ymin設定下界,ymax設定上界;
  geom_ribbon(aes(ymin = Anomaly10y-Unc10y, ymax=Anomaly10y+Unc10y), alpha = 0.2) +
  # 折線圖函式
  geom_line()

        執行效果:

繪製基本面積圖

        本例選用如下測試資料集:

        繪製方法是在基函式中設定好資料集和橫縱軸,然後加入geom_area()函式繪製面積圖。R語言示例程式碼如下:

# 基函式
ggplot(sunspotyear, aes(x = Year, y = sunspots)) +
  #  面積圖函式:fill設定填充顏色,alpha設定透明度;
  geom_area(fill = "blue", alpha = .2)

        執行效果:

繪製堆積面積圖

        本例選用如下測試資料集:

        繪製方法是在基本面積圖之上往基函式的美學特徵集裡設定fill引數。R語言示例程式碼如下:

# 基函式:fill設定分組依據
ggplot(uspopage, aes(x = Year, y = Thousands, fill = AgeGroup)) +
  # 面積圖函式
  geom_area()

        執行效果:

        顯然,各分組資料有大小關係。因此,可將調色盤設定為漸變色。R語言實現程式碼如下所示:

# 基函式
ggplot(uspopage, aes(x = Year, y = Thousands, fill = AgeGroup)) +
  # 面積圖函式
  geom_area() +
  # 調色標尺:breaks反轉圖例順序
  scale_fill_brewer(palette = "Blues", breaks = rev(levels(uspopage$AgeGroup)))

        執行結果:

        如果需要繪製百分比堆積圖,只需要在上面工作的基礎上修改下原資料。

        R語言實現程式碼如下:

# 將資料轉換為百分比格式
uspopage_prop = ddply(uspopage, "Year", transform, Percent = Thousands / sum(Thousands) * 100)
# 基函式
ggplot(uspopage_prop, aes(x = Year, y = Percent, fill = AgeGroup)) +
  # 面積圖函式
  geom_area() +
  # 調色標尺
  scale_fill_brewer(palette = "Blues", breaks = rev(levels(uspopage_prop$AgeGroup)))

        執行結果:

        PS:對於某些使用者來說,可能希望顏色深的圖例在下面。這個需求只需在基函式美學特徵集裡修改下圖例的排序順序即可。

        PPS:堆積面積圖的原資料通常是寬資料格式,需要實現將其轉換為長資料格式。轉換方法可參考本系列博文的第二篇。

相關文章