resolution{ggplot2}を利用して棒グラフの幅を変更する方法

resolution {ggplot2} を利用して棒グラフの幅を変更する方法です。

始めにサンプルデータを作成します。年次データのサンプルとします。

library(dplyr)
n <- 10
Date <- seq.Date(from = as.Date("2020-1-1"), length.out = n, by = "year")
Value <- rnorm(n = n, mean = 0, sd = 10)
(dframe <- data.frame(Date, Value))
         Date      Value
1  2020-01-01  17.047693
2  2021-01-01  -3.586350
3  2022-01-01  -3.363623
4  2023-01-01  -4.121734
5  2024-01-01 -14.465473
6  2025-01-01   1.890567
7  2026-01-01   2.110521
8  2027-01-01   9.853084
9  2028-01-01   6.504206
10 2029-01-01  -2.422650

ggplot を利用して棒グラフを作成します。

最初は geom_bar(width = ***) を指定せずに出力します。

library(ggplot2)
library(tidyr)
g0 <- dframe %>%
  gather(key = "key", value = "value", colnames(.)[-1]) %>%
  ggplot(mapping = aes(x = Date, y = value)) +
  theme_minimal()
g0 + geom_bar(stat = "identity")
Figure 1

出力した棒グラフの幅を確認します。

plotarea <- ggplot_build(g0)$data[[1]]
(original_resolution <- resolution(x = plotarea$x, zero = FALSE))
[1] 365

年次データをサンプルとしましたので365日分の幅で棒グラフが出力されています。

その幅を半分( width = original_resolution × 0.5 )にした棒グラフを出力します。

g0 + geom_bar(stat = "identity", width = original_resolution * 0.5)
Figure 2

もう一つサンプルを作成します。次は月次データとします。

n <- 12 * 2
Date <- seq.Date(from = as.Date("2020-1-1"), length.out = n, by = "month")
Value <- rnorm(n = n, mean = 0, sd = 10)
(dframe <- data.frame(Date, Value))
         Date       Value
1  2020-01-01  12.0581720
2  2020-02-01  10.2522524
3  2020-03-01  20.3476609
4  2020-04-01   0.2893916
5  2020-05-01  -7.1268005
6  2020-06-01   7.1939344
7  2020-07-01  19.6499319
8  2020-08-01   0.3977500
9  2020-09-01 -11.9839857
10 2020-10-01   7.4805218
11 2020-11-01  -2.3990164
12 2020-12-01   7.9034770
13 2021-01-01  -4.0957709
14 2021-02-01   3.4628879
15 2021-03-01   6.0719271
16 2021-04-01   2.4179006
17 2021-05-01  10.6624217
18 2021-06-01  11.2855385
19 2021-07-01   1.6936663
20 2021-08-01   1.8297796
21 2021-09-01  -3.5445145
22 2021-10-01   2.4159834
23 2021-11-01 -15.2043542
24 2021-12-01  20.4918453
library(ggplot2)
library(tidyr)
g0 <- dframe %>%
  gather(key = "key", value = "value", colnames(.)[-1]) %>%
  ggplot(mapping = aes(x = Date, y = value)) +
  theme_minimal()
g0 + geom_bar(stat = "identity")
Figure 3
plotarea <- ggplot_build(g0)$data[[1]]
(original_resolution <- resolution(x = plotarea$x, zero = FALSE))
[1] 28

月次データをサンプルとしましたので28日分の幅で棒グラフが出力されています。

その幅を10分の1( width = original_resolution × 0.1 )とした棒グラフを出力します。

g0 + geom_bar(stat = "identity", width = original_resolution * 0.1)
Figure 4

1つや2つのグラフ出力であれば、直接 geom_bar(width = ***) に数値を指定するだけで事が済みますが、連続して棒グラフを出力する際にサンプルサイズが大きいときは棒の幅を細くして自動的に「隙間」を調整し、グラフの視認性を向上させたい際に私は利用しています。

以上です。