如何跨面或网格绘制 geom_line

问题描述

我的数据:

Plate   Month   Day     Concentration
A       April   1       17.1094
B       April   2       16.001
C       April   3       17.9501
D       April   4       18.3686
E       April   5       18.3133
F       April   6       19.1189
G       May     1       16.0423
H       May     2       16.3614
I       May     3       18.5723
J       May     4       19.1091
K       May     5       17.6863
L       May     6       18.2647

使用 geom_line 我能够绘制一个折线图,将所有点连接到一个漂亮的图中,如下所示:

myData <- data.frame(read.table("myData.txt",sep="\t",header=TRUE))

ggplot(myData,aes(x = Plate,y = Concentration,group=1)) + geom_point() + geom_line()

enter image description here

我使用分面面板根据月份对数据进行了区分,然后绘制了如下所示的折线图。此处,线图在 4 月的最后一天之后断开。我如何绘制跨面的线图,即从四月到五月?

ggplot(myData,aes(x = Day,y = Concentration)) + facet_wrap(~ Month,nrow = 1) + geom_line() + geom_point() 

enter image description here

解决方法

你可以伪造它:

mydata <- "Plate   Month   Day     Concentration
A       April   1       17.1094
B       April   2       16.001
C       April   3       17.9501
D       April   4       18.3686
E       April   5       18.3133
F       April   6       19.1189
G       May     1       16.0423
H       May     2       16.3614
I       May     3       18.5723
J       May     4       19.1091
K       May     5       17.6863
L       May     6       18.2647"

myData <- data.frame(read_table(mydata))

myData <- myData %>% mutate(plot_day = seq_along(Day))
rect_data <- myData %>% group_by(Month) %>% 
  summarise(data.frame(xmin = min(plot_day),xmax=max(plot_day))) %>% 
  mutate(ymin = 19.25,ymax=19.5)

ggplot() + 
  geom_point(data = myData,aes(x = plot_day,y = Concentration)) + 
  geom_rect(data=rect_data,aes(ymin=ymin,ymax=ymax,xmin=xmin-c(.55,.45),xmax=xmax+c(.45,.55)),fill="gray75",col="transparent") + 
  geom_text(data = rect_data,aes(x=c(3.5,9.5),y=19.375,label = c("April","May"))) + 
  coord_cartesian(xlim=c(.449,12.551),ylim=c(15.75,19.501),expand=0) + 
  scale_x_continuous(breaks = seq(2,12,by=2),labels=c("2","4","6","2","6")) + 
  geom_vline(xintercept=6.5,col="white",size=2) +
  geom_line(data = myData,y = Concentration)) + 
  labs(x="Day")   

enter image description here