【问题标题】:How to create a stacked line plot如何创建堆积线图
【发布时间】:2012-11-30 11:37:38
【问题描述】:

在R中创建堆积条形图有多种解决方案,但是如何绘制堆积线图?

【问题讨论】:

标签: r charts diagram


【解决方案1】:

可以使用ggplot2 包创建堆叠线图。

一些示例数据:

set.seed(11)
df <- data.frame(a = rlnorm(30), b = 1:10, c = rep(LETTERS[1:3], each = 10))

这种情节的函数是geom_area:

library(ggplot2)
ggplot(df, aes(x = b, y = a, fill = c)) + geom_area(position = 'stack')

【讨论】:

    【解决方案2】:

    鉴于图表数据可作为数据框使用,列中有“线”,行中有 Y 值,并且 row.names 是 X 值,此脚本使用多边形函数创建堆叠折线图。

    stackplot = function(data, ylim=NA, main=NA, colors=NA, xlab=NA, ylab=NA) {
      # stacked line plot
      if (is.na(ylim)) {
        ylim=c(0, max(rowSums(data, na.rm=T)))
      }
      if (is.na(colors)) {
        colors = c("green","red","lightgray","blue","orange","purple", "yellow")
      }
      xval = as.numeric(row.names(data))
      summary = rep(0, nrow(data))
      recent = summary
    
      # Create empty plot
      plot(c(-100), c(-100), xlim=c(min(xval, na.rm=T), max(xval, na.rm=T)), ylim=ylim, main=main, xlab=xlab, ylab=ylab)
    
      # One polygon per column
      cols = names(data)
      for (c in 1:length(cols)) {
        current = data[[cols[[c]]]]
        summary = summary + current
        polygon(
          x=c(xval, rev(xval)),
          y=c(summary, rev(recent)),
          col=colors[[c]]
        )
        recent = summary
      }
    }
    

    【讨论】:

    • 建议调整:将... 添加到参数列表中,以便所有plot 函数参数都可以使用。特别是,xaxs="i" 将消除堆叠图和绘图边缘之间的白边。
    【解决方案3】:

    只需在 geom_line(position = "stack") 中指定 position = "stack" 即可。例如:

    dat <- data.frame(x = c(1:5,1:5),
                  y = c(9:5, 10,7,5,3,1),
                  type = rep(c("a", "b"), each = 5))
    
    library(dplyr)
    library(ggplot2)
    
    
    dat %>% 
      ggplot(aes(fill = type,
                 x = x,
                 y = y,
             color = type,
             linetype = type)) +
      geom_line(position = "stack", size = 2) + # specify it here
      theme_bw()
    

    导致堆积线图:

    或者,您也可以将堆积线图与geom_area plot as shown here 结合起来:

        dat %>% 
      ggplot(aes(fill = type,
                 x = x,
                 y = y,
             color = type,
             linetype = type)) +
      geom_area(position="stack", 
                stat="identity",
                alpha = 0.5) +
      geom_line(position = "stack", size = 2) + 
      theme_bw()
    

    【讨论】:

      猜你喜欢
      • 2020-03-21
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多