ggplot2:删除geom_area引入的差距?

时间:2018-02-20 08:59:33

标签: r ggplot2

我正在尝试创建非常简单的绘图 - 基本上是一个折线图,但是在线下面的区域用于指定AM和PM(我在切面网格中生成其中的几个,因为我希望读者能够快速看到它们之间的差异AM和PM值。)

我的难点在于使用 geom_area 会引入一个中断,其中ampm值从 AM 变为 PM

如果删除geom_area,则绘图将由连续的geom_line正确表示。

如果添加geom_area,则会再次发生中断。

我还没有在网上找到解决方案。有谁知道如何消除这个突破?

example of gap added using geom_area

# sample data
clicks <- c(513, 400, 200, 101,45, 60,89, 222, 385, 628, 1004, 987, 1020,970, 753, 645, 580, 723, 823, 765, 894, 710, 623, 500)

day <- rep("Monday", 24)
hour <- seq(0,23)
am <- rep("AM", 12)
pm <- rep("PM", 12)
ampm <- append(am,pm )

df_click_data.monday <-data.frame(day, hour, ampm,  clicks)
df_click_data.monday$ampm <-factor(df_click_data.monday$ampm, levels=c("AM","PM"))

# simple plot to illustrate problem
p <- ggplot(df_click_data.monday, aes(x = hour, y=clicks )) +
   geom_line(size=0.4) +
   geom_area(aes(fill=ampm))
p

1 个答案:

答案 0 :(得分:3)

这是一种解决方法,可以添加一个人工点来正确填充“AM&#39;面积:

new.lines <- df_click_data.monday[df_click_data.monday$hour==12,]
new.lines$ampm <- "AM"
new.lines$hour <- 11.9999
df_click_data.monday <- rbind(df_click_data.monday, new.lines)

p <- ggplot(df_click_data.monday, aes(x = hour, y=clicks )) +
  geom_line(size=0.4) +
  geom_area(aes(fill=ampm))
p

enter image description here

或者,您可能想要使用geom_bar(stat = "identity")

ggplot(data = df_click_data.monday, aes(x = hour, y = clicks, fill = ampm)) + 
  geom_bar(stat = "identity") 

enter image description here

ggplot(data = df_click_data.monday, aes(x = hour, y = clicks, fill = ampm)) + 
  geom_bar(stat = "identity", width=1) 

enter image description here