How do I fill a geom_area() plot using ggplot?

前端 未结 1 1587
谎友^
谎友^ 2020-12-05 21:37

I have a geom_area plot that looks like this: \"area

I want to color everything above the x-axis green a

相关标签:
1条回答
  • 2020-12-05 22:30

    You need to make a new grouping variable for each positive/negative segment. To make the transitions less "blocky", you can just first interpolate the data:

    require(ggplot2)
    
    # Load data
    df = read.table('data.txt', header=T)
    df$created = as.POSIXct(df$created, tz='UTC')
    
    # Interpolate data
    lin_interp = function(x, y, length.out=100) {
        approx(x, y, xout=seq(min(x), max(x), length.out=length.out))$y
    }
    created.interp = lin_interp(df$created, df$created)
    created.interp = as.POSIXct(created.interp, origin='1970-01-01', tz='UTC')
    score.interp   = lin_interp(df$created, df$score)
    df.interp = data.frame(created=created.interp, score=score.interp)
    
    # Make a grouping variable for each pos/neg segment
    cat.rle = rle(df.interp$score < 0)
    df.interp$group = rep.int(1:length(cat.rle$lengths), times=cat.rle$lengths)
    
    # Plot
    dev.new(width=6, height=4)
    ggplot(data = df.interp, aes(x = created, y = score, fill=score>0, group=group)) + geom_area() + scale_fill_manual(values = c('green', 'red'))
    

    enter image description here

    0 讨论(0)
提交回复
热议问题