【问题标题】:R - ggplot2: geom_area loses its fill if limits are defined to max and min values from a data.frameR - ggplot2:如果将限制定义为 data.frame 中的最大值和最小值,geom_area 将失去填充
【发布时间】:2016-03-15 10:19:02
【问题描述】:

我正在尝试使用 ggplot2 重现 sparkline,就像这张图片底部的那样:

使用以下代码,我得到了显示在代码末尾的结果。 注意:我的实际 data.frame 只有 2 行。因此结果看起来像一行。

# Create sparkline for MM monthly
# sparkline(dailyMM2.aggregate.monthly$Count, type = 'line')
p <- ggplot(dailyMM2.aggregate.monthly, aes(x=seq(1:nrow(dailyMM2.aggregate.monthly)), y=Count)) + 
  geom_area(fill="#83CAF5") +
  geom_line(color = "#2C85BB", size = 1.5) +
  scale_x_continuous(expand=c(0,0)) +
  scale_y_continuous(expand=c(0,0))   

p + theme(axis.line=element_blank(),axis.text.x=element_blank(),
          axis.text.y=element_blank(),axis.ticks=element_blank(),
          axis.title.x=element_blank(),
          axis.title.y=element_blank(),legend.position="none",
          panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
          panel.grid.minor=element_blank(),plot.background=element_blank())

但是,由于我尝试只使用迷你图 show trends,因此绝对值与我无关,我必须调整 ggplot 的配置以限制我的最小值和最大值之间的可见区域轴.y。我使用limits 选项:

# Create sparkline for MM monthly
# sparkline(dailyMM2.aggregate.monthly$Count, type = 'line')
p <- ggplot(dailyMM2.aggregate.monthly, aes(x=seq(1:nrow(dailyMM2.aggregate.monthly)), y=Count)) + 
  geom_area(fill="#83CAF5") +
  geom_line(color = "#2C85BB", size = 1.5) +
  scale_x_continuous(expand=c(0,0)) +
  scale_y_continuous(expand=c(0,0), limits = c(min(dailyMM2.aggregate.monthly$Count)-100, max(dailyMM2.aggregate.monthly$Count)+100))   

p + theme(axis.line=element_blank(),axis.text.x=element_blank(),
          axis.text.y=element_blank(),axis.ticks=element_blank(),
          axis.title.x=element_blank(),
          axis.title.y=element_blank(),legend.position="none",
          panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
          panel.grid.minor=element_blank(),plot.background=element_blank())

但是,结果并不像预期的那样,因为整个 geom_area 的填充消失了,如下图所示:

谁能解释为什么会发生这种行为,也许可以帮助我找到解决这个问题的正确方法?

【问题讨论】:

    标签: r ggplot2 sparklines


    【解决方案1】:

    如果您检查?geom_area,您会注意到最小值固定为0。使用geom_ribbon 可能更容易。它具有ymin 美学。使用limitscoord_cartesian 设置最大y 值。

    library(reshape2)
    library(ggplot2)
    
    # Some data
    df=data.frame(year = rep(2010:2014, each = 4),
              quarter=rep(c("Q1","Q2","Q3","Q4"),5),
              da=c(46,47,51,50,56.3,53.6,55.8,58.9,61.0,63,58.8,62.5,59.5,61.7,60.6,63.9,68.4,62.2,62,70.4))
    
    df.m <- melt(data = df, id.vars = c("year", "quarter"))
    
    ymin <- min(df.m$value)
    ymax <- max(df.m$value)
    
    ggplot(data = df.m, aes(x = interaction(quarter,year), ymax = value, group = variable)) +
          geom_ribbon(aes(ymin = ymin), fill = "#83CAF5") +
          geom_line(aes(y = value), size = 1.5, colour = "#2C85BB") +
          coord_cartesian(ylim = c(ymin, ymax)) +
          scale_y_continuous(expand = c(0,0)) +
          scale_x_discrete(expand = c(0,0)) +
          theme_void()
    

    【讨论】:

      猜你喜欢
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多