ggplot2可視化經典案例(4)之雲雨圖

2021-02-18 R語言數據分析指南

之前分享過雲雨圖的小例子,現在分析一個進階版的雲雨圖,喜歡的小夥伴可以關注個人公眾號R語言數據分析指南持續分享更多優質案例,在此先行拜謝了!!

加載R包
library(tidyverse)
library(colorspace)
library(ggtext)
library(tidytuesdayR)
library(ggdist)

設置主題
theme_set(theme_minimal())

theme_update(
  panel.grid.major = element_line(color = "grey92", size = .4),
  panel.grid.minor = element_blank(),
  axis.title.x = element_text(color = "grey30",
  margin = margin(t = 7)),
  axis.title.y = element_text(color = "grey30",
  margin = margin(r = 7)),
  axis.text = element_text(color = "grey50"),
  axis.ticks =  element_line(color = "grey92", size = .4),
  axis.ticks.length = unit(.6, "lines"),
  plot.title = element_text(hjust = 0,
  color = "black",size = 21, margin = margin(t = 10, b = 35)),
  plot.subtitle = element_text(hjust = 0,
  face = "bold", color = "grey30",size = 14,
  margin = margin(0, 0, 25, 0)),
  plot.title.position = "plot",
  plot.caption = element_text(color = "grey50",
  size = 10, hjust = 1,lineheight = 1.05,
  margin = margin(30, 0, 0, 0)),
  plot.caption.position = "plot",
  plot.margin = margin(rep(20, 4)))

加載數據

通過tidytuesdayR包可以輕鬆的訪問每周的TidyTuesday項目數據集,建議小夥伴多多了解TidyTuesday

pal <- c("#FF8C00", "#A034F0", "#159090")

tuesdata <- tidytuesdayR::tt_load('2020-07-28') 

df_penguins <- tuesdata$penguins

數據清洗
df_rect <- tibble(xmin = c(-Inf, 2.46, 3.27),
xmax = c(Inf, Inf, Inf),ymin = c(3, 2, 1),
ymax = c(Inf, Inf, Inf))

df_peng_iqr <- 
  df_penguins %>% 
  mutate(bill_ratio = bill_length_mm / bill_depth_mm) %>% 
  filter(!is.na(bill_ratio)) %>% group_by(species) %>% 
  mutate(median = median(bill_ratio),
         q25 = quantile(bill_ratio, probs = .25),
         q75 = quantile(bill_ratio, probs = .75),
         n = n()) %>% ungroup() %>% 
  mutate(species_num = as.numeric(fct_rev(species)))

ggplot2數據可視化
p <- ggplot(df_peng_iqr,aes(bill_ratio,species_num -.2)) +
geom_rect(data = df_rect,aes(xmin = xmin, xmax = xmax,
ymin = ymin, ymax = ymax),inherit.aes = F,fill = "white")+
geom_linerange(data = df_peng_iqr %>% 
group_by(species, species_num) %>% 
summarize(m = unique(median)),
aes(xmin = -Inf, xmax = m, y = species_num,
color = species),
inherit.aes = F,linetype = "dotted",size = .7)+
geom_boxplot(aes(color = species),
width = 0,size = .9)+
geom_rect(aes(xmin = q25,
xmax = median,ymin = species_num - .05,
ymax = species_num - .35),fill = "grey89") +
geom_rect(aes(xmin = q75,xmax = median,
ymin = species_num - .05,ymax = species_num - .35),
fill = "grey79")+
geom_segment(aes(x = q25, xend = q25,y = species_num - .05,
yend = species_num - .35,
color = species),
size = .25)+
geom_segment(aes(x = q75, xend = q75,y = species_num - .05,
yend = species_num - .35,color = species),
size = .25)+
geom_point(aes(color = species), 
shape = "|",size = 5,alpha = .33)

pp <- p + ggdist::stat_halfeye(aes(y = species_num,
color = species,fill = after_scale(lighten(color, .5))),
shape = 18,point_size = 3,interval_size = 1.8,
adjust = .5,.width = c(0, 1))+
geom_text(data = df_peng_iqr %>% 
group_by(species, species_num) %>% 
summarize(m = unique(median)),
aes(x = m, y = species_num + .12,
label = format(round(m, 2), nsmall = 2)),
inherit.aes = F,color = "white",size = 3.5) +
geom_text(data = df_peng_iqr %>% 
group_by(species, species_num) %>% 
summarize(n = unique(n), max = max(bill_ratio, na.rm = T)),
aes(x = max + .01, y = species_num + .02,
label = glue::glue("n = {n}"),
color = species),inherit.aes = F,
size = 3.5,hjust = 0) +coord_cartesian(clip = "off") +
scale_x_continuous(limits = c(1.57, 3.7),
breaks = seq(1.6, 3.6, by = .2),
expand = c(.001, .001)) +
xlab(NULL)+ylab(NULL)+
scale_y_continuous(limits = c(.55, NA),
breaks = 1:3,
labels = c("Gentoo","Chinstrap", "Adelie"),
expand = c(0, 0))

pp + scale_color_manual(values = pal,guide = F) +
  scale_fill_manual(values = pal,guide = F)  +
  theme(panel.grid.major.y = element_blank(),
        axis.text.y = element_text(color = rev(pal),
size = 14, lineheight = .9),
axis.ticks.length = unit(0, "lines"))

相關焦點

  • 一文讀懂ggplot2數據可視化
    前言ggplot2是數據可視化的重要程序包,用於繪製各種高級統計圖形。
  • 如何通過Google來使用ggplot2可視化
    正好看到一些公司的科研結題報告裡面非常贊的圖都是ggplot2出品的,就下定決心學一下。老規矩,先看點中文資料,接觸最早是Y叔的ggplot系列,作為初學者入門指引綽綽有餘了。把代碼在R裡面原樣輸出看看效果,把數據和代碼和圖形在腦海中形成連接,最後留在我心底的就只有映射這一核心思想。
  • 在Python中使用ggplot2風格及語法: plotnine與ggplot|可視化系列05
    將其簡化就是:數據+圖形映射+坐標系=>出圖。返璞歸真幻化萬千可視化表達 — 絕雲 & 御術[1] 如果說ggplot2庫的語句寫法是以上思想的典範之作,在Python裡ggplot庫便是實踐的先行者(項目叫ggpy,開發的庫名是ggplot),但因為不達預期,2016年之後,幾位大佬在補充完善ggplot庫的過程中選擇了另起爐灶,寫了plotnine庫,該庫誕生後備受關注。
  • 如何在Python裡用ggplot2繪圖
    構成圖形語法的其餘組件是可選的,可以實現它們來改進可視化。facet指的是子圖的規範,也就是說,在單獨的圖中,將數據中的多個變量相鄰地繪製在一起。統計轉換主要指在圖表中包含匯總統計信息,例如中位數或百分位數。坐標描述了不同的坐標系。最常用和默認的坐標系是笛卡爾坐標系。根據您想要繪製的數據的結構,使用較少的坐標系(如極坐標系統)可能提供一種更好的可視化數據的方法。
  • ggplot2高效實用指南 (可視化腳本、工具、套路、配色)
    作者:嚴濤 浙江大學作物遺傳育種在讀研究生(生物信息學方向)偽碼農,R語言愛好者,愛開源ggplot2學習筆記之圖形排列
  • 乾貨 | 繪圖的基本元素(ggplot2實現)
    但是如果你用一幅圖來表示這個信息的話,那麼你就可以非常清楚地看清楚這三個圖形的位置關係。3.當我們將數據可視化的時候,可以看到一些用文字無法看到的信息。例如下面的這個散點圖:數據可視化的主流工具有哪些?
  • ggplot2可視化經典案例(7)之繪製餅圖
    Occupation = map_chr(Occupation, format_text)  ) %>%  bind_cols(coord)# Palettes dubois_pal <- c("1" = NA, "2" = "#DD263F", "3" = "#FFC500","4"
  • R語言可視化學習筆記之ggridges包繪製山巒圖
    嚴濤老師的繪圖教程還有:gganimate |諾獎文章裡面的動圖繪製教程來了!!ggplot2學習筆記之圖形排列R包ggseqlogo |繪製序列分析圖ggplot2高效實用指南 (可視化腳本、工具、套路、配色)簡介ggridges包主要用來繪製山巒圖。
  • 【語言班】R語言數據分析與可視化高級研修班(4.26-29)
    3.採用實例案例進行分析,解決生活工作中實際問題。4.採用理論知識和上機操作相結合,實現學員現場親身體驗,產生問題現場解決,達到每節課都讓培訓學員學會操作。5.介紹科研論文繪圖相關的基礎知識、科研雜誌對發表論文中圖表的要求,統計做圖以及相關的繪圖工具與技術,對繪製好的圖表或照片的修圖、微調等方法。為您更好地表達科研結果,助力科研文章的快速發表。
  • plotnine: Python版的ggplot2作圖庫
    R語言的ggplot2繪圖能力超強,python雖有matplotlib,但是語法臃腫,使用複雜,入門極難,seaborn的出現稍微改善了matplotlib代碼量問題,但是定製化程度依然需要藉助matplotlib,使用難度依然很大。
  • ggplot2繪圖之四:散點圖、折線圖,點線圖
    為避免消化不良,引起不適,特此建議:說明1:為了更全面地了解和學習ggplot2繪圖,建議沒有觀看前三期的同學可以先打卡前三期視頻
  • ggplot2散點圖篇
    library(ggplot2)ggplot(mydata, aes(Zn, Pb)) + geom_point()「shape = 」:控制點的形狀(ggplot2        ggplot2中數據點有以下26種shape,其中:序號0-14:可定義邊框顏色,不可填充;序號15-20:不可定義邊框顏色,可填充;序號21-25:可定義邊框顏色,
  • visreg:帶你玩遍模型可視化
    * x2 + 1.2 * x1 * x2 + ey1 <- 0.8 + 1.7 * x1 + 1.4 * x2 + 0.5 * x1 * x2 + ey <- ifelse(cat == 0, y0, y1)data <- data.frame(y, x1, x2, x3, cat = as.factor(cat))各個變量之間關係如下圖所示:
  • ​數據可視化 | 6個基本可視化Python庫
    這6個可視化庫均有獨特之處,可以解決特定類型的可視化任務。matplotlib以其在Python中作為二維繪圖庫提供的高度靈活性而著稱。如果您有MATLAB編程背景,您會對Matplotlib的Pyplot接口非常熟悉。
  • R語言實戰(19)——使用ggplot2進行高級繪圖
    19.1 ggplot2包介紹ggplot2包是使用R進行數據可視化的重要工具,提供一個全面的、基於語法的、連貫一致的圖形生成系統,允許用戶創建新穎的、有創新性的數據可視化圖形。ggplot2的語法1. 在ggplot2中,圖是採用串聯起來(+)號函數創建的。每個函數修改屬於自己的部分。2. ggplot()函數設置圖形但沒有自己的視覺輸出。
  • 免費資源 | R語言可視化繪圖,讓你的SCI論文更加完美
    這次的視頻詳細介紹了R語言可視化繪圖的操作,希望大家看過之後能夠掌握這樣技能。注意:想要領取資源的小夥伴們,請點擊文末了解更多哦!!資源目錄1. par函數2 .散點圖&盒形圖3. 條形圖&直方圖4.餅圖&克利夫蘭點圖&條件圖5. 低級繪圖函數(1)6. 低級繪圖函數(2)7.
  • ggplot2簡易教程
    關於ggplot2包詳細介紹請進入ggplot2文檔查閱。了解速度與距離的關係,選擇散點圖或者折線圖展示。繪製散點圖代碼:layer2 <- layer1 + geom_point()print(layer2)結果:
  • 推薦: 一本「高顏值」的Python語言數據可視化圖書
    但是數據可視化一直是其短板,特別相比較R語言而言。R語言以ggplot2包及其拓展包人性化的繪圖語法大受用戶的喜愛,特別是生物信息與醫學研究者。Rggplot2有兩本很經典的教程:ggplot2 Elegant Graphicsfor Data Analysis和R Graphics Cookbook,兩本書重點介紹了ggplot2包的繪圖語法及常見圖表的繪製方法。
  • 社會科學研究中的R語言與數據可視化系列直播課
    在中國人民大學連續三年開設R與數據可視化課程,課程評分接近滿分。課程大綱第一講:R介紹(1月9日 19:30——21:30)1. 基本計算2. 數據類型3. 軟體包的安裝與獲取幫助4.數據清洗第二講:R BASE基本可視化(1月10日19:30——21:30)1. R作圖的基本介紹2. 基本的圖形類型3. 圖形繪製的細節4. 圖形的顏色5.
  • 為何古人用雲雨來形容星河好夜聞清佩,雲雨歸時帶異香
    在古詩詞當中,「同房」這詞聽起來有些粗俗,於是文人們便經常用「雲雨」來代替「同房」,以此來形容男女之事。很多經典名著也用「雲雨」表示男女之事,例如《紅樓夢》、《水滸傳》等。這裡的「雲雨」就是分別的含義。  四、雲雨比作恩澤  正所謂:久旱逢露,雲雨是甘露的前兆,在中國古代,看到雲雨即將要來,是非常高興的事情。於是有詩人就將雲雨比作恩澤。  這種說法最早出現在《後漢書·鄧騭傳》:"託日月之末光,被雲雨之渥澤。"日月的光,雲雨的滋潤,是上天的恩澤!