Rで解析:グラフのHALF&HALF!「gghalves」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

「ggplot2」パッケージで2種類のグラフを組み合わせた表現が可能なパッケージの紹介です。組み合わせ可能なグラフはPointPlot、ViolinPlot、DotPlot、BoxPlotdです。

実行コマンドでは各コマンドと組み合わせの例を紹介します。

パッケージバージョンは0.1.2。実行コマンドはwindows 11のR version 4.1.3で確認しています。

スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("gghalves")

実行コマンド

詳細はコマンド、各パッケージのヘルプを確認してください。

#パッケージの読み込み
library("gghalves")

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
set.seed(1234)
n <- 100
TestData <- tibble(Group = sample(paste0("Group", 1:4), n,
                                  replace = TRUE),
                   ID = sample(LETTERS[1:5], n, replace = TRUE),
                   Y_Data = sample(c(51:100), n, replace = TRUE))

#ggplot&#12398;&#22522;&#26412;&#25551;&#20889;&#12456;&#12522;&#12450;&#12434;&#35373;&#23450;
BaseGG <- ggplot(TestData, aes(x = Group, y = Y_Data, label = ID))
########

#&#22522;&#28310;&#36600;&#12395;&#23550;&#12375;&#12390;&#25351;&#23450;&#38936;&#22495;&#12395;PointPlot&#12434;&#20316;&#25104;:geom_half_point&#12467;&#12510;&#12531;&#12489;
#&#38936;&#22495;&#12398;&#25351;&#23450;:side&#12458;&#12503;&#12471;&#12519;&#12531;;&#24038;:"l",&#21491;:"r"
#point&#12398;&#12496;&#12521;&#12484;&#12461;&#12434;&#25351;&#23450;:range_scale&#12458;&#12503;&#12471;&#12519;&#12531;;0&#12391;&#12496;&#12521;&#12484;&#12461;&#12394;&#12375;
BaseGG +
  geom_half_point(side = "r", range_scale = 0, aes(color = Group))

#&#22522;&#28310;&#36600;&#12395;&#23550;&#12375;&#12390;&#25351;&#23450;&#38936;&#22495;&#12395;&#12464;&#12523;&#12540;&#12503;&#20998;&#12369;&#12398;PointPlot&#12434;&#20316;&#25104;:geom_half_point_panel&#12467;&#12510;&#12531;&#12489;
#&#38936;&#22495;&#12398;&#25351;&#23450;:side&#12458;&#12503;&#12471;&#12519;&#12531;;&#24038;:"l",&#21491;:"r"
#point&#12398;&#12496;&#12521;&#12484;&#12461;&#12434;&#25351;&#23450;:range_scale&#12458;&#12503;&#12471;&#12519;&#12531;;0&#12391;&#12496;&#12521;&#12484;&#12461;&#12394;&#12375;
BaseGG +
  geom_half_point_panel(side = "l", range_scale = 0.75, aes(color = ID))

#&#22522;&#28310;&#36600;&#12395;&#23550;&#12375;&#12390;&#25351;&#23450;&#38936;&#22495;&#12395;ViolinPlot&#12434;&#20316;&#25104;:geom_half_violin&#12467;&#12510;&#12531;&#12489;
#&#38936;&#22495;&#12398;&#25351;&#23450;:side&#12458;&#12503;&#12471;&#12519;&#12531;;&#24038;:"l",&#21491;:"r"
BaseGG +
  geom_half_violin(side = "r", aes(fill = Group))

#&#22522;&#28310;&#36600;&#12395;&#23550;&#12375;&#12390;&#25351;&#23450;&#38936;&#22495;&#12395;DotPlot&#12434;&#20316;&#25104;:geom_half_dotplot&#12467;&#12510;&#12531;&#12489;
#&#38598;&#35336;&#27861;&#12398;&#25351;&#23450;:method&#12458;&#12503;&#12471;&#12519;&#12531;:"dotdensity","histodot"
#&#38936;&#22495;&#12398;&#25351;&#23450;:stackdir&#12458;&#12503;&#12471;&#12519;&#12531;;&#24038;:"down",&#21491;:"up"
BaseGG +
  geom_half_dotplot(method = "dotdensity", stackdir = "down", aes(fill = Group))

#&#22522;&#28310;&#36600;&#12395;&#23550;&#12375;&#12390;&#25351;&#23450;&#38936;&#22495;&#12395;BoxPlot&#12434;&#20316;&#25104;:geom_half_boxplot&#12467;&#12510;&#12531;&#12489;
#&#38936;&#22495;&#12398;&#25351;&#23450;:side&#12458;&#12503;&#12471;&#12519;&#12531;;&#24038;:"l",&#21491;:"r"
BaseGG +
  geom_half_boxplot(side = "r", aes(fill = Group))

###&#32068;&#12415;&#21512;&#12431;&#12379;&#20363;#####
ggplot() +
  geom_half_boxplot(data = TestData %>% filter(Group == "Group1"),
                    aes(x = Group, y = Y_Data, fill = Group)) +
  geom_half_violin(data = TestData %>% filter(Group == "Group1"),
                   aes(x = Group, y = Y_Data, fill = Group), side = "r") +
  geom_half_boxplot(data = TestData %>% filter(Group == "Group2"),
                    aes(x = Group, y = Y_Data, fill = Group)) +
  geom_half_point_panel(data = TestData %>% filter(Group == "Group2"),
                        aes(x = Group, y = Y_Data, color = ID), side = "r") +
  geom_half_dotplot(data = TestData %>% filter(Group == "Group3"),
                    aes(x = Group, y = Y_Data, fill = Group),
                        method = "dotdensity", stackdir = "down") +
  geom_half_boxplot(data = TestData %>% filter(Group == "Group3"),
                    aes(x = Group, y = Y_Data, fill = Group), side = "r") +
  geom_half_point(data = TestData %>% filter(Group == "Group4"),
                  aes(x = Group, y = Y_Data, colour = Group),
                  side = "l", range_scale = 0.75, size = 2.5) +
  geom_half_violin(data = TestData %>% filter(Group == "Group4"),
                   aes(x = Group, y = Y_Data, fill = Group), side = "r") +
  scale_fill_manual(values = c("Group1" = "#4b61ba", "Group2" = "#e1e6ea",
                               "Group3" = "#756c6d", "Group4" = "#ad8a80")) +
  scale_color_manual(values = c("Group1" = "#4b61ba", "Group2" = "#e1e6ea",
                                "Group3" = "#756c6d", "Group4" = "#ad8a80",
                                "A" = "#4b61ba", "B" = "green",
                                "C" = "yellow", "D" = "#ad8a80", "E" = "red")) +
  theme(legend.position = "none",
        panel.border = element_rect(linetype = "solid", fill = NA),
        panel.grid.major.y = element_blank(),
        panel.grid.minor.y = element_blank(),
        panel.background = element_rect(fill = NA))

出力例

・geom_half_pointコマンド

・geom_half_point_panelコマンド

・geom_half_violinコマンド

・geom_half_dotplotコマンド

・geom_half_boxplotコマンド

・組み合わせ例


少しでも、あなたの解析が楽になりますように!!

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