Rで変数ごとに表示をカスタマイズできるヒートマップ ー革新的な可視化, funkyheatmapー

Rでプレゼンテーション

データ分析では、得られた結果を明確に示す可視化がとても重要です。
以前、相関行列のヒートマップについて解説をしました。

Rで相関係数のヒートマップによる可視化:新型コロナ陽性者数の都道府県別動向 ーcorrplotー
以前の投稿で、熊本県の新型コロナ陽性者数動向と他都道府県との相関関係について書きました。 厚労省のオープンデータを用いて、引き続きデータ解析を行います。 #1 #2まで以前の投稿と同じ部分。 patient_pre...

今回は、多彩なカスタマイズが可能な「funkyheatmap」パッケージを紹介します。


1. funkyheatmapの特徴

・表示のカスタマイズ(変数ごとでの指定OK):
列や行の注釈を与えることで、複数の色彩パレットや図形の割り当て、列や行のカテゴリ別でのグループ化が可能。
・複数の図形表示:
funkyrect(丸みを帯びた四角形)、circle(円)、rect(四角形)、bar(棒グラフ)、pie(円グラフ)、text(テキスト)、type(画像)など、様々な図形を列に割り当てることができる。
・高度な色彩設定:
色彩パレットを用いて、データのカテゴリや数値に基づく色分けが可能。データのパターンや傾向が把握しやすくなる。

このように、funkyheatmap はデータの視覚化において高い柔軟性とカスタマイズ性を持ち、複数の変数を持つ複雑なデータセットの可視化に有用です。


2. funkyheatmapのコード例

mtcarsを使用したコード例を紹介します。

mtcars は Rにあるデータセットで、Motor Trend US magazine(1974)に掲載された自動車に関するデータです。このデータセットは、32車種の燃費を含む様々な属性に関する情報(変数)を提供しており、一般的にデータ分析や統計学の教育でよく使われます。
※変数
mpg: ガロンあたりの走行マイル数(燃費)、cyl: エンジンのシリンダー数、disp: エンジンの排気量(立方インチ)、hp: 馬力、drat: ドライブ軸の比率、wt: 重量(1000ポンド単位)、qsec: 1/4マイルを走るのにかかる時間(秒)、vs: V型または直列エンジン(V型=0, 直列=1)、am: トランスミッションの種類(自動=0, 手動=1)、gear: 前進ギアの数、carb: キャブレターの数。

・funkyheatmap1 (デフォルト表示)

install.packages("funkyheatmap")
library(funkyheatmap)

library(dplyr)
library(tibble)
library(purrr)

data <- mtcars %>%
  rownames_to_column("id") %>%
  arrange(desc(mpg))                  #1 mtcarsのデータを調整。

head(data)
              id  mpg cyl  disp  hp drat    wt  qsec vs am gear carb
1 Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
2       Fiat 128 32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
3    Honda Civic 30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
4   Lotus Europa 30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
5      Fiat X1-9 27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
6  Porsche 914-2 26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2

d<-funky_heatmap(data)               #2 funkyheatmap作成 
d                                   
ggsave("funkyheatmap_d.png", d, device = png, width = d$width, height = d$height, dpi=300) #3 データPNG保存

#1  rownames_to_column 自動車の列名をidとした。
arrange(desc(mgp))で、mgpの値を降順にした。なお、mgp昇順にしたい場合は、arrange(mgp)でOK。
#2 デフォルト表示は、カラーBlues、図形funkyrect。
#3 図の縦横表示が初期のサイズで、解像度は指定して、PNG保存した。

Rで作図を高解像度に保存する方法について ーpng(), ggsave() などー
Rで作図したものを、論文や著書で使用するため、高解像度で保存する方法は? Rは、データの視覚化にとても便利なツールです。データの詳細な分析や学術論文の掲載時には、作った図を高解像度で保存したいですよね。 ...

表示のデフォルトで図形はfunkyrect、色は青白。数値が大きいと四角形・白になり、小さいと丸・青になります。





・funkyheatmap2(カスタマイズ)

column_info <- tribble( 
~id, ~group, ~name, ~geom, ~palette, ~options, 
"id", NA, "", "text", NA, list(hjust = 0, width = 6), 
"mpg", "overall", "Miles / gallon", "bar", "palette1", list(width = 4, legend = FALSE), 
"cyl", "overall", "Number of cylinders", "bar", "palette2", list(width = 4, legend = FALSE),
"disp", "group1", "Displacement (cu.in.)", "funkyrect", "palette1", lst(), 
"hp", "group1", "Gross horsepower", "funkyrect", "palette1", lst(), 
"drat", "group1", "Rear axle ratio", "funkyrect", "palette1", lst(), 
"wt", "group1", "Weight (1000 lbs)", "funkyrect", "palette1", lst(), 
"qsec", "group2", "1/4 mile time", "circle", "palette2", lst(), 
"vs", "group2", "Engine", "circle", "palette2", lst(), 
"am", "group2", "Transmission", "circle", "palette2", lst(), 
"gear", "group2", "Forward gears", "circle", "palette2", lst(), 
"carb", "group2", "Carburetors", "circle", "palette2", lst())  #1 各変数に表示用の情報追加

column_groups <- tribble(  
~Category, ~group, ~palette, 
"Overall", "overall", "overall", 
"Group 1", "group1", "palette1", 
"Group 2", "group2", "palette2" )                       #2 グループの色情報追加

palettes <- tribble( ~palette, ~colours, 
"overall", grDevices::colorRampPalette(rev(RColorBrewer::brewer.pal(9, "Greys")))(100), 
"palette1", grDevices::colorRampPalette(rev(RColorBrewer::brewer.pal(9, "Blues")))(100), 
"palette2", grDevices::colorRampPalette(rev(RColorBrewer::brewer.pal(9, "Reds")))(100))  #2 色指定

g<-funky_heatmap(
data = data2,
column_info = column_info,
column_groups = column_groups,
palettes = palettes,
position_args = position_arguments(expand_xmax = 4))  #3 funkyheatmap作成

g

ggsave("funkyheatmap_g.png", g, device = png, width = g$width, height = g$height, dpi=300) #4 データPNG保存

#1 各変数をグループ化、表示図形の指定、表示色の指定、表示サイズの指定などを行った。
#2 グループの図上での表示と色指定を行った。
#3 position_argsでは、表示サイズについて指定。epand_xmax=4はヒートマップの x 軸方向の最大拡張量を指定。この場合、 x 軸の最大端が通常よりも 4 単位分拡大される。これにより、図の文字表示が図内への表示が可能。

このように、変数別でbar、funkyrect、circleの図形を同一図上で表示することができます。
また、色も各変数で指定が可能ですので、目的に応じてデザインをカスタマイズできます。

このように、funkyheatmapは、科学研究やデータ分析において、複雑なデータセットを視覚的に表現するのに非常に有効です。


3. funkyheatmapの使用論文、参考サイト

・funkyheatmap 使用論文
Benchmarking the translational potential of spatial gene expression prediction from histology
Adam S. Chan, Chuhan Wang, Xiaohang Fu, Shila Ghazanfar, Jinman Kim, Ellis Patrick, Jean YH Yang
bioRxiv 2023.12.12.571251; doi: https://doi.org/10.1101/2023.12.12.571251
こちらの文献は、組織画像から空間遺伝子発現を予測する手法を検討されています。
funkyheatmapは、Fig.2a(組織病理画像から空間的な遺伝子発現を予測する手法の主要な特徴を強調したサマリーヒートマップ、および各評価項目における性能のランキング)2b(各評価指標における各手法の順位をカテゴリー別にグループ化した詳細ヒートマップ)で使用されています。
詳細については、文献をご確認いただければと思います。

・参考サイト:
https://github.com/funkyheatmap/funkyheatmap
https://cran.r-project.org/web/packages/funkyheatmap/vignettes/mtcars.html




コメント

タイトルとURLをコピーしました