R語言可視化學習筆記之ggridges包

2021-03-02 生信寶典

作者:嚴濤 浙江大學作物遺傳育種在讀研究生(生物信息學方向)偽碼農,R語言愛好者,愛開源。

簡介

ggridges包主要用來繪製山巒圖。尤其是針對時間或者空間分布可視化具有十分好的效果。ggridges主要提供兩個幾何圖像函數:

具體用法可以參考官方文檔:

https://cran.r-project.org/web/packages/ggridges/vignettes/introduction.html

geom_ridgeline()

library(ggridges)
library(tidyverse)
# grid.arrange來自於gridExtra包,可以同時拼圖多個ggplot2對象
library(gridExtra)


my_data <- data.frame(x=1:5, y=rep(1,5), height=c(0,1,-1,3,2))
plot_base <- ggplot(my_data, aes(x, y, height=height))

# 默認負值不顯示,除非指定min_height參數

grid.arrange(plot_base+geom_ridgeline(),
            plot_base+geom_ridgeline(min_height=-2), ncol=2)

geom_density_ridges()

geom_density_ridges()函數首先會根據數據計算密度然後繪圖,此時美學映射height沒有必要寫入函數中。下面使用lincoln_weather數據集。

# creates a vector of n equally spaced colors along the
# Matplolib 'viridis' color map

# also designed to be perceived by readers with the most common form of color blindness
#  scale_fill_viridis函數來源於此包,
# 其參數 option用於設置顏色 "magma" (or "A"), "inferno" (or "B"), "plasma" (or "C"),
and "viridis" (or "D", the default option).
# ?viridis可以查看其具體含義

library(viridis)
head(lincoln_weather[ ,1:4])


## # A tibble: 6 x 4
##   CST      `Max Temperature [F]` `Mean Temperature [F]` `Min Temperature ~
##   <chr>                    <int>                  <int>              <int>
## 1 2016-1-1                    37                     24                 11
## 2 2016-1-2                    41                     23                  5
## 3 2016-1-3                    37                     23                  8
## 4 2016-1-4                    30                     17                  4
## 5 2016-1-5                    38                     29                 19
## 6 2016-1-6                    34                     33                 32

# x後的值用 ` (反引號)括起,是因為列名字中存在空格和特殊字符,需要特殊對待
# fill = ..x.., double dots是ggplot2的一種特殊識別符,用來區分定義的和計算的美學參數
# 這裡指用橫軸的數據著色

ggplot(lincoln_weather, aes(x=`Mean Temperature [F]`, y=`Month`, fill=..x..))+
 geom_density_ridges_gradient(scale=3, rel_min_height=0.01, gradient_lwd = 1.)+
 scale_x_continuous(expand = c(0.01, 0))+ # 擴展下橫軸和縱軸
 scale_y_discrete(expand = c(0.01,0))+
 scale_fill_viridis(name="Temp. [F]", option = "C")+
 labs(title="Temperature in Lincoln NE",
      subtitle="Mean temperature (Fahrenheit) by month for 2016\nData:Orogin CSV from the Weather Underground ")+
 theme_ridges(font_size = 13, grid = FALSE)+
 theme(axis.title.y = element_blank())

cyclinal scales

為了使得ggridges繪製的圖形可視化效果最好,同時為了減少用戶對顏色設置的困難,作者提供了cyclinal scales用於顏色輪轉映射。

ggplot(diamonds, aes(x=price, y=cut, fill=cut))+
 geom_density_ridges(scale=4)+
 scale_fill_cyclical(values = c("blue", "green"))+
 theme_ridges(grid = FALSE)

默認的,cyclinal scales為了防止誤解是不繪製圖例的,但是可以通過選項guide="legend"添加圖例。

ggplot(diamonds, aes(x=price, y=cut, fill=cut))+
 geom_density_ridges(scale=4)+
 scale_fill_cyclical(values = c("blue", "green"), guide="legend")+
 theme_ridges(grid = FALSE)

ggplot2一樣,圖例是可以修改的,其他參數比如大小、透明度、形狀等都是可以通過cyclinal scales修改。

ggplot(diamonds, aes(x=price, y=cut, fill=cut))+
 geom_density_ridges(scale=4)+
 scale_fill_cyclical(values = c("blue", "green"), guide="legend",
                     labels=c("Fair"="blue", "Good"="green"),
                     name="Fill colors")+
 theme_ridges(grid = FALSE)

再來2個示例

不做解釋了,如果想重現就把代碼拆解開,按需修改。一句句話單獨拆開運行,理解其操作內容。

library(dplyr)
library(forcats)
Catalan_elections %>%
 mutate(YearFct = fct_rev(as.factor(Year))) %>%
 ggplot(aes(y = YearFct)) +
 geom_density_ridges(
   aes(x = Percent, fill = paste(YearFct, Option)),
   alpha = .8, color = "white", from = 0, to = 100
 ) +
 labs(
   x = "Vote (%)",
   y = "Election Year",
   title = "Indy vs Unionist vote in Catalan elections",
   subtitle = "Analysis unit: municipalities (n = 949)",
   caption = "Marc Belzunces (@marcbeldata) | Source: Idescat"
 ) +
 scale_y_discrete(expand = c(0.01, 0)) +
 scale_x_continuous(expand = c(0.01, 0)) +
 scale_fill_cyclical(
   breaks = c("1980 Indy", "1980 Unionist"),
   labels = c(`1980 Indy` = "Indy", `1980 Unionist` = "Unionist"),
   values = c("#ff0000", "#0000ff", "#ff8080", "#8080ff"),
   name = "Option", guide = "legend"
 ) +
 theme_ridges(grid = FALSE)

library(DAAG) # for ais dataset
ais$sport <- factor(
 ais$sport,
 levels = c("B_Ball", "Field", "Gym", "Netball", "Row", "Swim", "T_400m", "T_Sprnt", "Tennis", "W_Polo"),
 labels = c("Basketball", "Field", "Gym", "Netball", "Row", "Swim", "Track 400m", "Track Sprint", "Tennis", "Water Polo")
)

ggplot(ais, aes(x=ht, y=sport, color=sex, point_color=sex, fill=sex)) +
 geom_density_ridges(
   jittered_points=TRUE, scale = .95, rel_min_height = .01,
   point_shape = "|", point_size = 3, size = 0.25,
   position = position_points_jitter(height = 0)
 ) +
 scale_y_discrete(expand = c(.01, 0)) +
 scale_x_continuous(expand = c(0, 0), name = "height [cm]") +
 scale_fill_manual(values = c("#D55E0050", "#0072B250"), labels = c("female", "male")) +
 scale_color_manual(values = c("#D55E00", "#0072B2"), guide = "none") +
 scale_discrete_manual("point_color", values = c("#D55E00", "#0072B2"), guide = "none") +
 guides(fill = guide_legend(
   override.aes = list(
     fill = c("#D55E00A0", "#0072B2A0"),
     color = NA, point_color = NA))
 ) +
 ggtitle("Height in Australian athletes") +
 theme_ridges(center = TRUE)

還有很多用法有興趣的可以查看官方文檔https://cran.r-project.org/web/packages/ggridges/vignettes/introduction.html和https://cran.r-project.org/web/packages/ggridges/vignettes/gallery.html)繼續學習。

嚴濤老師的繪圖教程還有:

往期精品(點擊圖片直達文字對應教程)

後臺回復「生信寶典福利第一波」或點擊閱讀原文獲取教程合集

相關焦點

  • R語言可視化學習筆記之ggridges包繪製山巒圖
    ggplot2學習筆記之圖形排列R包ggseqlogo |繪製序列分析圖ggplot2高效實用指南 (可視化腳本、工具、套路、配色)簡介ggridges包主要用來繪製山巒圖。尤其是針對時間或者空間分布可視化具有十分好的效果。
  • 整理了一些自己可能會用到的R包~20210125更新
    更新於2021年1月25號gtable生信菜鳥團 公眾號分享的文章 R包:gtable包用於處理ggplot2圖像ggrgl畫三維圖 在 微生物生信 看到的推文 ggrgl:用ggplot做3D圖表rayshader公眾號有人留言說這個包做ppt很好用,我查了一下,大體看了一眼幫助文檔
  • R語言學習筆記之相關性矩陣分析及其可視化
    library(Hmisc)#加載包res2 <- rcorr(as.matrix(mydata))res2#可以用res2$r、res2$P來提取相關係數以及顯著性p-valueres2$r可視化相關係數矩陣有不同的方法來可視化,主要有下面四種:##symnum() function主要用法:symnum(x, cutpoints
  • R語言可視化學習筆記之添加p-value和顯著性標記
    ggplot2_2.2.1#### loaded via a namespace (and not attached):## [1] Rcpp_0.12.11 compiler_3.4.0 plyr_1.8.4## [4] tools_3.4.0 digest_0.6.12 evaluate_0.10## [7] tibble_1.3.3 gtable
  • R可視化快速入門-- (20) 脊線圖
    常常被用來可視化隨時間或空間變化的多個分布/直方圖變化。安裝包ggridges# Cran安裝install.packages("ggridges")# github上安裝library(devtools)install_github("clauswilke/ggridges")繪圖基礎圖形主要利用
  • R語言可視化之UpSetR包
    今天介紹一個R包UpSetR,專門用來集合可視化,來源於UpSet,Python裡面也有一個相似的包py-upset。此外還有個UpSetR shiny app以及原始碼.UpsetR繪製集合可視化圖形使用函數upset()。
  • R語言學習:數據可視化技能,Pair Plot,LR模型手寫版,dplyr包across函數,快速學習ggplot2包畫圖
    01 R語言數據可視化技能數據可視化目的是為了發現和溝通。R語言擅長做數據可視化。數據可視化技能是我們做數據科學工作的核心技能之一。我喜歡學習和實踐R語言做數據可視化知識,增進自己的數據可視化技能。05 如何快速學習ggplot2做數據可視化?ggplot2包做數據可視化,包括三個核心組件。我們從數據可視化說起。
  • R語言學習:R4DS學習、6種join操作理解、case_when函數理解、ggplot2包做數據可視化
    這一周R語言學習,記錄如下。01 Modern Statistics with R 一本在線開放書籍,介紹R語言做數據整理和探索,以及推斷和預測的工作。06 R4DS第一章  ggplot2包與數據可視化簡要筆記1 為什麼需要數據可視化
  • R語言ggplot繪製峰巒圖繪製
    峰巒圖繪製清除當前環境中的變量rm(list=ls())設置工作目錄setwd("C:/Users/Dell/Desktop/R_Plots/19ridge/")使用ggridges包繪製峰巒圖library(ggridges)library(ggplot2)#### Attaching package: 'ggplot2'## The following object is masked from 'package:ggridges':#### scale_discrete_manual# 查看示例數據head
  • R語言學習筆記之聚類分析
    個人博客: https://ytlogos.github.io/使用k-means聚類所需的包:library(factoextra)library(cluster)l #數據準備使用內置的R數據集USArrests#load the dataset
  • R 語言入門學習路線與資源匯總
    本篇推文就不介紹為什麼需要學R了,你能打開這篇文章,說明你有學習 R 的想法或者正在學習 R 的路上。今天簡單介紹下R語言的學習路線以及R學習資源匯總。1.剛開始學習R語言,可以看一些免費入門視頻,可以在B站上面搜,B站有很多免費的R語言入門視頻,比如《尚學堂尹鴻的R語言速成實戰》[1],這個視頻是免費的,視頻講義素材來源於《R語言實戰》的第一章到第六章,這幾章可以邊看書邊跟著視頻學習,用來簡單入門基本夠了。
  • R語言信息可視化——文字雲
    這一篇跟大家分享R語言信息可視化——文字雲。R語言可以輕鬆處理信息可視化,並且很早就有專用的信息可視化包——WordCloud。
  • R語言學習路線和常用數據挖掘包
    那麼,眾多書籍中,一個生手應該從哪一本著手呢?入門之後如何才能把自己練就成某個方面的高手呢?相信這是很多人心中的疑問。有這種疑問的人有福了,因為筆者將根據自己的經歷總結一下R語言書籍的學習路線圖以使Ruser少走些彎路。本文分為6個部分,分別介紹初級入門,高級入門,繪圖與可視化,計量經濟學,時間序列分析,金融等。
  • R語言學習:可視化分析,Apply家族函數,row_number函數,R4DS學習,數據變換
    這一周R語言學習,記錄如下。01 美國謀殺數據集可視化分析畫圖代碼# 美國謀殺數據集可視化分析library(dslabs)library(tidyverse)library(ggthemes)data
  • 【萬字長文】R語言入門學習路線與資源匯總
    本篇推文就不介紹為什麼需要學R了,你能打開這篇文章,說明你有學習R的想法或者正在學習R的路上。今天簡單介紹下R語言的學習路線以及R學習資源匯總。下面涉及到的R語言書籍我打包了PDF文件,有需要的在本公眾號後臺回復20210112即可免費獲取,整理不易,伸手黨勿擾。
  • 全棧數據之R語言常用包和函數
    常用命令總結全棧數據之MySQL常用命令總結全棧數據之Python常用工具和函數《R語言實戰》,這是高濤、肖楠等翻譯的一本書詳細全面介紹了入門、圖形、統計、回歸、方差、功效分析、廣義線性模型、主成分、因子分析、缺失值處理等。
  • Tidy時代R語言學習的一些ABC
    在R語言所有的新發展當中,tidyverse無疑是最為耀眼的一個。tidyverse系列R包由Hadley Wickham開發,強化了R的數據處理和數據分析框架,大幅提升了便利性和效率。而且,由於tidyverse的易用性,大量的新R包以它為基礎進行開發,或者以它為標準對過去的R包進行整合。
  • 數據可視化之R語言
    分類數據的可視化使用條形圖、點圖、柱形圖、脊柱圖、馬賽克圖、餅圖及四折圖連續數據的可視化使用箱線圖、直方圖、散點圖及其變種、帕累託圖==============================================一、分類數據的可視化
  • R語言可視化(十八):UMAP圖繪製
    0.2## 6 5.4 3.9 1.7 0.4head(iris.labels)## [1] setosa setosa setosa setosa setosa setosa## Levels: setosa versicolor virginica使用umap包進行
  • R語言數據可視化ggplot2包
    ggplot2是R語言最為強大的作圖軟體包,有著自成一派的可視化理念,數據可視化是數據分析的重要一步,讓我們通過由淺入深的掌握數據可視化的精髓。