「ggplot2」パッケージの軸の体裁を色々整えるコマンドの紹介です。ラベルの変更、第二軸の追加と体裁の調整、dttm classの調整、「ggtext」と「glue」パッケージを利用してmarkdown書式でラベルの体裁を調整、グラフの目盛りを内側するコマンドです。
windows11のR version 4.2.2で確認しています。
パッケージのインストール
「ggplot2」パッケージを含む、「tidyverse」パッケージを利用します。
#パッケージのインストール install.packages("tidyverse")
実行コマンドの紹介
詳細はコマンド、パッケージのヘルプを確認してください。
#ggplot2を含むtidyverseパッケージの読み込み library("tidyverse") #日付データの作成に便利:lubridateパッケージがなければインストール if(!require("lubridate", quietly = TRUE)){ install.packages("lubridate");require("lubridate") } ###データ例の作成##### set.seed(1234) n <- 30 TestData <- tibble(Group = sample(paste0("Group ", 1:5), n, replace = TRUE), Date = seq(lubridate::ymd("2022-12-01", locale = "C", tz = "Asia/Tokyo"), by = "1 day", length.out = n), Text = sample(paste0("KARADA_Good_", 1:5), n, replace = TRUE)) ######## ###空のggplotを作成##### #ひな形です,ひな形の内容を変更していきます TestGG <- ggplot(TestData, aes(x = Text, y = Date)) #プロット TestGG ######################## ###ラベルを変更する:labs/xlab/ylabコマンド##### ##labsコマンド:title,subtitle,captionなどの変更が可能 #例:labsコマンド TestGG + labs(x = "X軸のラベル変更", y = "y軸のラベル変更") #xlab/ylabコマンド TestGG + xlab(label = "X軸のラベル変更") + ylab(label = "y軸のラベル変更") ######## ###ラベルの体裁を変更する:guides/guide_axisコマンド##### ##guidesコマンドで第二軸含めて指定しguide_axisコマンドで ##角度,指定数で階段状に表示する TestGG + guides(x = guide_axis(n.dodge = 2), y = guide_axis(n.dodge = 3), #第二軸 x.sec = guide_axis(angle = 90), y.sec = guide_axis(angle = 45)) ######## ###dttm classの軸調整##### TestGG + #scale_XXX_XXXは軸のデータのみの調整なので #体裁はguidesやthemeコマンドを使用する scale_y_datetime( #第一軸調整 #月/日/曜日/年通算日数 date_labels = "%b/%d/(%a)/[%j]", #第二軸調整 sec.axis = #第一軸と同じデータでラベル内容を変える場合は #dup_axisコマンドを使用する sec_axis( #変形は秒で指定:例は時間*3600秒(1時間の変更) trans = ~ . + 48*3600, #第二軸ラベル name = "Date_2", #月/日/時/午前午後 labels = scales::time_format("%b_%d_%I_%p") )) + guides(x = guide_axis(n.dodge = 2), y = guide_axis(n.dodge = 3), y.sec = guide_axis(angle = -45)) ######## ###markdown書式でラベルの体裁を調整する##### ###「ggtext」パッケージの「element_markdownコマンド」と ###「glue」パッケージを使用することが拡張性がありおすすめ if(!require("ggtext", quietly = TRUE)){ install.packages("ggtext");require("ggtext") } if(!require("glue", quietly = TRUE)){ install.packages("glue");require("glue") } #例えばGroupの最後尾が偶数の時「太字の緑」 #奇数の時「イタリックの黄」の表示にする #まずはfunctionを作成する:markdown表記は #「glue」パッケージを使用すると簡単です #XLabの体裁 XJugeLabs <- function(x) { ifelse(as.numeric(str_sub(x, -1)) > 3, glue::glue("<b style='color:green; font-size:20pt;'>{x}</b>"), glue::glue("<i style='color:black; font-size:13pt;'>{x}</i>")) } #例えばDateの日が偶数の時「太字の赤」 #奇数の時「イタリックの青」の表示にする #まずはfunctionを作成する:markdown表記は #「glue」パッケージを使用すると簡単です #YLabの体裁 YJugeLabs <- function(x) { ifelse(lubridate::day(x)%%2 == 0, glue::glue("<b style='color:red; font-size:15pt;'> {format(x,'%b_%d_%I_%p')}</b>"), glue::glue("<i style='color:blue; font-size:13pt;'> {format(x,'%b_%d_%I_%p')}</i>")) } #「glue」パッケージを使用しない場合 #JugeLabs <- function(x) { # ifelse(lubridate::day(x)%%2 == 0, # paste0("<b style='color:red'>", x, "</b>"), # paste0("<i style='color:blue'>", x, "</i>"))} #プロット TestGG + scale_x_discrete(labels = XJugeLabs) + scale_y_datetime(labels = YJugeLabs) + #markdown表記を適応する theme(axis.text.x = ggtext::element_markdown(angle = 45, hjust = 1.1), axis.text.y = ggtext::element_markdown()) ######## ###目盛りを内側にする##### #axis.ticks.lengthにマイナスを設定する #axis.ticks.length.x/axis.ticks.length.yがある #極端な長さにしてます TestGG + theme(axis.ticks.length = unit(-10, "mm")) ####### ###目盛りの色,太さを変える##### #themeコマンド「axis.ticks」オプションに #「element_line」コマンドに設定する #axis.ticks.x/axis.ticks.yがある TestGG + theme(axis.ticks.length.x = unit(10, "mm"), axis.ticks = element_line(color = "red", size = 5)) ####### ###軸線の色,太さを変える##### #themeコマンド「axis.line」オプションに #「element_line」コマンドに設定する #axis.line.x/axis.line.yがある TestGG + theme(axis.ticks.length.x = unit(10, "mm"), axis.line.x = element_line(color = "red", size = 2)) ####### ###軸線を矢印にする##### #themeコマンド「axis.line」オプションに #「element_line」コマンドに「grid::arrow」を設定する #矢印の位置:endオプション:"last","first","both" #矢印のスタイル:typeオプション:"open","closed" TestGG + theme(axis.line.x = element_line(arrow = arrow(length = unit(1, "cm"), ends = "both", type = "open"), color = "red", size = 2)) ######## ###dttm class軸を指定した日の間隔に変更する##### #lubridateパッケージと組み合わせてfunctionを作成する DaysLabsCreate <- function(day){ function(x){ ifelse(lubridate::day(x)%%day == 0, #ラベルのフォーマットはここで変更する format(x,'%Y_%b_%d'), "") } } #例えば TestGG + scale_y_datetime(date_breaks = "1 day", labels = DaysLabsCreate(day = 5)) #######
出力例
各画像はクリックで拡大表示されます。
少しでも、あなたの解析が楽になりますように!!