R - ggplot2:如果将限制定义为data.frame的max和min值,则geom_area会丢失其填充

时间:2016-03-15 10:19:02

标签: r ggplot2 sparklines

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

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的填充消失了,如下图所示:

Sparkline 2

任何人都可以解释为什么会发生这种行为并且可能帮助我找到解决这个问题的正确方法吗?

1 个答案:

答案 0 :(得分:1)

如果您选中.apply(),则会注意到最小值固定为0.使用?geom_area可能更容易。它具有geom_ribbon美学。使用yminlimits设置最大y值。

coord_cartesian

enter image description here