EMD(经验模态分解)算法 三

上次搞定了R语言对一列的值做emd然后输出所有imf的组合图,下面尝试处理多列数值。

绘制所有省份最高值的最后一个IMF

   # 读取数据
  load <- data.frame(read.csv("最高.csv"))
  # 取对数 length(load) load[,2:length(load)] <- log(load[,2:length(load)]) 最后的表的标题
  title <- "全省区最高值最后一个IMF"
  # emd循环 创建一个用于存储图表的list
  plotlist <- list()
  for (i in 2:length(load)) {
    # emd计算
    emd <- emd(xt = load[, i], boundary = "wave", stoprule = "type5")
    # 选择绘制IMF并存储!!!在此处选择绘制哪一条曲线
    emdframe <- data.frame(Time = load[, "日期"], EMD = emd$imf[, emd$nimf])
    plotlist[[i - 1]] <- ggplot(data = emdframe, aes(x = Time, y = EMD)) + geom_hline(yintercept = 0, colour = "red") + geom_line(size = 0.5) + labs(x = paste("IMF", emd$nimf), y = colnames(load[i]))
  }
  # 绘制组合图
  totalplot <- cowplot::plot_grid(plotlist = plotlist, ncol = floor(sqrt(length(load) - 1)))
  # now add the title
  titleplot <- ggdraw() + draw_label(title, fontface = "bold")
  finalplot <- plot_grid(titleplot, totalplot, ncol = 1, rel_heights = c(0.05, 1))  # rel_heights values control title margins
  finalplot

全省区最高值原值

所有省份最高值的最后一个IMF

所有省份最高值的余项

你可能感兴趣的:(EMD(经验模态分解)算法 三)