「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))
#######
出力例
各画像はクリックで拡大表示されます。



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