我有一个时间序列,可以可视化百分比variabel和计数变量。我希望计数图大于百分比图。使用ggpubr
将两个图放在一起会产生问题,问题在于x轴在图之间不对齐,因此比较起来很困难。任何解决方案或解决方法?
示例
library(tidyverse)
library(lubridate)
library(scales)
library(ggpubr)
df <- data.frame(date = rep(seq(ymd('2015-01-01'), ymd('2018-01-01'), by = '1 month'), 2),
percentage = c(runif(37, 0.6, 1), runif(37, 0.5, 0.9)),
count = c(runif(74, 1000000000, 2000000000)),
id = c(rep('A', 37), rep('B', 37)))
p1 <- ggplot(df, aes(x = date, y = percentage, col = id)) +
geom_line() +
scale_y_continuous(labels = percent)
p2 <- ggplot(df, aes(x = date, y = count, col = id)) +
geom_line() +
scale_y_continuous(labels = comma)
ggarrange(p1, p2, nrow = 2, common.legend = TRUE, legend = 'right', heights = c(4, 1))
答案 0 :(得分:0)
适当地,它只需要再一个参数即可
ggarrange(p1, p2, nrow = 2, common.legend = TRUE, legend = 'right', heights = c(4, 1), align = 'v')
答案 1 :(得分:0)
您确实要求解决方法。这是一种变通方法,可让您快速到达目的地!
首先,我做了一个标注功能,在左边的空格处填充了百分比。实际上,它是一个返回函数的函数,在您的ggplot2
代码中会很方便。
label_fun <- function(width) {
function(x) str_pad(percent(x), width, side = "left")
}
然后您可以精确调整所需的宽度,但是在ggplot2
代码本身中看起来像这样:
p1 <- ggplot(df, aes(x = date, y = percentage, col = id)) +
geom_line() +
scale_y_continuous(labels = label_fun(18))
(其他都一样。)
首先,我检查了其他标签的最大长度:
nchar(comma(max(df$count))) # 13
但是,这还不够,只是因为不同的字符具有不同的宽度(例如,逗号明显超窄)。所以我从那里修补。使用函数以这种方式创建函数使修改超级容易和快捷。参见下面的结果。