2016-03-15 77 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