2016-03-15 74 views
2

我试图再现sparkline与像一个在该图像的底部GGPLOT2定义为最大值和最小值:的R - GGPLOT2:geom_area失去其填充如果限制从data.frame

Example of Sparklines

使用下面的代码,我得到结果显示在代码的末尾。 说明:我的实际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()) 

Sparkline1

然而,正如我尽量只show trends与所述火花,因此,绝对值是不相关的对我来说,我已经适应了ggplot的配置,以限制可视区域在我的轴的最小和最大之间。我使用它的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的填充自败,如图所示folllowing图像:

Sparkline 2

任何人都了解轻为什么这种行为正在发生,并可能帮助我以正确的方式来解决这个问题?

回答

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() 

enter image description here