Rの関数 scale_x_break {ggbreak}(https://cran.r-project.org/package=ggbreak) を利用して ggplot で作成したチャートの Y軸 を一部省略(切断)する方法です。
時折り「棒グラフのY軸がゼロから始まっていない」と気色ばむ方がいらっしゃいますが、それは表示するデータの特性とチャートの目的次第です。
例えば、為替レートのように0.001円の単位で利益を得たり、破産したりする世界では Figure 1 のようなチャートを見せられても何の意味もありません。
# 架空の為替レートをサンプルデータとして作成します。
library(dplyr)
set.seed(20250517)
<- 50
n <- rnorm(n = n, mean = 145, sd = 0.1) %>% round(3)
y <- seq(from = as.Date("2020-1-1"), by = "+1 day", length.out = n)
x <- min(y))
(y_intercept_low <- max(y)) (y_intercept_high
[1] 144.756
[1] 145.232
可視化します。
library(ggplot2)
<- ggplot(mapping = aes(x = x, y = y)) +
g0 geom_col() +
scale_x_date(labels = function(x) format(x, "%y/%m/%d")) +
theme_minimal() +
theme(axis.title = element_blank()) +
geom_hline(yintercept = y_intercept_low, linetype = "dashed") +
geom_hline(yintercept = y_intercept_high, linetype = "dashed")
g0
レートの動きがわかりません。
よって、関数 ggplot2::coord_cartesian を利用して「無駄」な範囲を非表示にしてしまいます。
しかし、どうしても「ゼロから始まる棒グラフ」に固執する方のために 関数 ggbreak::scale_y_break を利用して、Y軸の一部を省略します。
<- c(10, y %>% min() %>%
(break_position
{floor(. * 10^2) / 10^2
}))<- g0 + ggbreak::scale_y_break(breaks = break_position, scales = 20)
g1 g1
[1] 10.00 144.75
時系列データの変動が見やすくなりました。
体裁を整えます。
<- g1 + scale_y_continuous(breaks = c(0, 10, scales::cbreaks(c(break_position[2], y %>% max() %>% ceiling()), scales::pretty_breaks(10))$breaks))
g2 g2
さらに、右側のY軸テキストやティックが不要な場合は、
+
g2 theme(
axis.text.y.right = element_blank(),
axis.ticks.y.right = element_blank(),
axis.line.y.right = element_blank()
)
以上です。