R 使用镶嵌面_包裹时,在ggplot2中使用具有不同比例因子的次y轴

R 使用镶嵌面_包裹时,在ggplot2中使用具有不同比例因子的次y轴,r,ggplot2,plot,axis,facet-wrap,R,Ggplot2,Plot,Axis,Facet Wrap,假设我有以下数据: library(ggplot2) library(ggthemes) data = structure(list(origin = c("ARG", "ARG", "ARG", "ARG", "CHL", "CHL", "CHL", "CHL", "COL", "COL", "COL", "COL", "MEX", "MEX", "MEX", "MEX"), date = c(2012, 2013, 2014, 2015, 2012, 2013, 2014, 2015

假设我有以下数据:

library(ggplot2)
library(ggthemes)

data = structure(list(origin = c("ARG", "ARG", "ARG", "ARG", "CHL", 
"CHL", "CHL", "CHL", "COL", "COL", "COL", "COL", "MEX", "MEX", 
"MEX", "MEX"), date = c(2012, 2013, 2014, 2015, 2012, 2013, 2014, 
2015, 2012, 2013, 2014, 2015, 2012, 2013, 2014, 2015), reer = c(99.200680735245, 
88.1100217095859, 91.138945064955, 38.2318792759958, 97.1355065168361, 
96.1872670893033, 93.6345905776444, 92.1029850680499, 101.123844098755, 
94.173001658586, 77.1226216761908, 59.6337376438912, 98.0983258996167, 
97.6713495865999, 92.2842729861424, 86.2605669691898), x_r = c(0.0874733578362671, 
0.0815610804254794, 0.0783917054809495, 0.0579932868099816, 0.178204232427659, 
0.16321408066481, 0.170084977520404, 0.151329817378872, 0.0498810245214703, 
0.0429419825495197, 0.0383271589817956, 0.0413797639710004, 0.246549060641858, 
0.242694346464116, 0.236773340112642, 0.269553103263527)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -16L), groups = structure(list(
    origin = c("ARG", "CHL", "COL", "MEX"), .rows = list(1:4, 
        5:8, 9:12, 13:16)), row.names = c(NA, -4L), class = c("tbl_df", 
"tbl", "data.frame")))
我正在尝试使用
facet\u wrap
以及使用
secs.axis
选项
scale\u y\u continuous
的辅助y轴绘制一个绘图。到目前为止,我得到的信息如下:

scale = 500

ggplot(data, aes(x = date)) +
  geom_line(aes(y = x_r), size = 2, color = "red") + 
  geom_line(aes(y = reer/scale), size = 2, color = "blue") +
  facet_wrap(.~origin, ncol = 4, scales = "free_y") + 
  scale_y_continuous(
    name = "X/GDP",
    sec.axis = sec_axis(~.*scale, name = "REER")
  ) +   
  theme_bw() +
  theme(
    axis.title.y = element_text(color = "red", size = 13),
    axis.title.y.right = element_text(color = "blue", size = 13)
  ) +
  ggtitle("Export Ratio and Real Effective Exchange Rate")

但是,对于所有国家,我使用的
scale
因子都是常量(scale=500),我希望每个国家有一个不同的比例因子。类似于
scaleFactor1=max(x\u r)/max(reerr)
。我知道
secs.axis
scale\u y\u continuous
选项是y轴主轴的线性组合,但我希望每个国家的y轴不同。我尝试了以下方法,但无效:

data = data %>% 
  group_by(origin) %>% 
  mutate(scaleFactor = max(x_r)/max(reerr)) %>% 
  mutate(reer_2 = reerr/scaleFactor)

ggplot(data, aes(x = date)) +
  geom_line(aes(y = x_r), size = 2, color = "red") + 
  geom_line(aes(y = reer), size = 2, color = "blue") +
  facet_wrap(.~origin, ncol = 4, scales = "free_y") + 
  scale_y_continuous(
    name = "X/GDP",
    sec.axis = sec_axis(~.*scaleFactor, name = "REER")
  ) +   
  theme_bw() +
  theme(
    axis.title.y = element_text(color = "red", size = 13),
    axis.title.y.right = element_text(color = "blue", size = 13)
  ) +
  ggtitle("Export Ratio and Real Effective Exchange Rate")

一种方法是拆分国家数据并创建单独的绘图,将它们保存到列表中。然后使用cowplot包在网格布局中绘制它们,类似于ggplot中的
facet\u wrap

这是您创建绘图的代码,不包括facet_wrap、创建scaleFactor和标题的Country对象

myPlot <- function(data){

  scaleFactor <- max(data$reer) / max(data$x_r)
  Country <- data$origin

  p <- ggplot(data, aes(x = date)) +
    geom_line(aes(y = x_r), size = 2, color = "red") + 
    geom_line(aes(y = reer/scaleFactor), size = 2, color = "blue") +
    #facet_wrap(.~origin, ncol = 4, scales = "free_y") + 
    scale_y_continuous(
      name = "X/GDP",
      sec.axis = sec_axis(~.*scaleFactor, name = "REER")
    ) +   
    theme_bw() +
    theme(
      axis.title.y = element_text(color = "red", size = 13),
      axis.title.y.right = element_text(color = "blue", size = 13)
    ) +
    ggtitle(Country)
  p
}
制作标题图,并使用
plot\u grid
将它们排列在网格中

p0 <- ggplot() + labs(title="Export Ratio and Real Effective Exchange Rate")

library(cowplot)

p1 <- plot_grid(plotlist=p_lst, ncol=2)
pp <- plot_grid(p0, p1, ncol=1, rel_heights=c(0.1, 1))
p0
p0 <- ggplot() + labs(title="Export Ratio and Real Effective Exchange Rate")

library(cowplot)

p1 <- plot_grid(plotlist=p_lst, ncol=2)
pp <- plot_grid(p0, p1, ncol=1, rel_heights=c(0.1, 1))