首页 > 解决方案 > ggplot,根据采样时间的数据空间?

问题描述

我需要根据采样之间的天数来分隔日期。在一些采样之间有 5 天和一些 4 天。数据看起来像这样(还需要添加到标签 BBCH):

 structure(list(Time = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 
4L, 5L, 5L), .Label = c("06.05.2016 BBCH 50–51", "09.05.2016 BBCH 51–53", 
"13.05.2016 BBCH 55–59", "16.05.2016 BBCH 59–61", "20.05.2016 BBCH 61–64"
), class = "factor"), Mean1 = c(0.9133333, 0.4366667, 0.313333, 
0.176, 0.4, 0.1533333, 0.2066667, 0.29, 0.4633333, 0.4833333), 
    sd = c(2.704973, 1.639598, 0.8780997, 0.5158375, 1.1213943, 
    0.5203121, 0.5461531, 0.6587969, 0.823153, 0.9965101), n = c(300L, 
    300L, 300L, 250L, 300L, 300L, 300L, 300L, 300L, 300L), Mean2 = c(0.15617168, 
    0.09466226, 0.05069711, 0.03262443, 0.06474373, 0.03004023, 
    0.03153216, 0.03803566, 0.04752476, 0.05753354), SNH = structure(c(1L, 
    2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("OC", "OF"
    ), class = "factor"), Round = structure(c(1L, 1L, 2L, 2L, 
    3L, 3L, 4L, 4L, 5L, 5L), .Label = c("Round 1", "Round 2", 
    "Round 3", "Round 4", "Round 5"), class = "factor")), class = "data.frame", row.names = c(NA, 
-10L))

和我的脚本:

Pan_16<-qplot(x= Time,
              y=  Mean1,
              group= SNH,              
              data =  Plant) +
  geom_errorbar(aes(ymin = Mean1- Mean2,
                    ymax = Mean1 + Mean2),
                width=0.2, size=1)+
  coord_cartesian(xlim=c(), ylim=c(0,2))+
  geom_line(size=1,aes(linetype = SNH)) + 
  scale_x_discrete(labels=function(x){sub("\\s", "\n", x)})+
  scale_color_manual("Field type", values=c("#gray20", "#gray46"))+
  labs(title = "", x = "", y = "")+
  annotate("text", x = 1 , y = 1.3, label = c("* * * "), color="black",  size=5 , fontface="bold")+
  annotate("text", x = 2 , y = 0.8, label = c(" * * ") , color="black",  size=5 , fontface="bold")+
  annotate("text", x = 3 , y = 0.8, label = c("* * * "), color="black",  size=5 , fontface="bold")+
  theme(axis.line = element_line(size = 1, colour = "grey80"))+
  theme( panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text = element_text(colour = "black"))+
  theme(
    plot.background = element_rect(fill = "white"), 
    panel.background = element_rect(fill = "white", colour="white"))

标签: rggplot2

解决方案


西西,让你继续......还要检查你的Time变量是否是一个因素。如果您没有得到预期的结果或错误,请始终检查数据类型。

赞美归于@Rui,他基本上给了你答案。

我从你的情节中去掉了多余的东西,以帮助你看到主要的构建块。您可以为所需的绘图/最终结果添加这些图层。

library(dplyr)

df <- structure(list(Time = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 
4L, 5L, 5L), .Label = c("06.05.2016 BBCH 50–51", "09.05.2016 BBCH 51–53", 
"13.05.2016 BBCH 55–59", "16.05.2016 BBCH 59–61", "20.05.2016 BBCH 61–64"
), class = "factor"), Mean1 = c(0.9133333, 0.4366667, 0.313333, 
0.176, 0.4, 0.1533333, 0.2066667, 0.29, 0.4633333, 0.4833333), 
    sd = c(2.704973, 1.639598, 0.8780997, 0.5158375, 1.1213943, 
    0.5203121, 0.5461531, 0.6587969, 0.823153, 0.9965101), n = c(300L, 
    300L, 300L, 250L, 300L, 300L, 300L, 300L, 300L, 300L), Mean2 = c(0.15617168, 
    0.09466226, 0.05069711, 0.03262443, 0.06474373, 0.03004023, 
    0.03153216, 0.03803566, 0.04752476, 0.05753354), SNH = structure(c(1L, 
    2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("OC", "OF"
    ), class = "factor"), Round = structure(c(1L, 1L, 2L, 2L, 
    3L, 3L, 4L, 4L, 5L, 5L), .Label = c("Round 1", "Round 2", 
    "Round 3", "Round 4", "Round 5"), class = "factor")), class = "data.frame", row.names = c(NA, 
-10L))
# ---------- coerce Time to character
df <- df %>% mutate(Time = as.character(Time)) 
# ---------- now make a Date column
df$Date <- as.Date(df$Time, "%d.%m.%Y")

# with the given data frame plot and set time axis
qplot(x= Date, y=  Mean1, group= SNH, data =  df) +
    geom_errorbar(aes(ymin = Mean1- Mean2,
                      ymax = Mean1 + Mean2),
                  width=0.2, size=1) + 
# ------------- set a date scale and "configure" to your liking
scale_x_date(  date_labels = "%d %b"        # show day and month
             , date_breaks = "2 days"       # have a major break every 2 days
             ,date_minor_breaks = "1 day"   # show minor breaks in between
)

ggplot:使用 scale_x_date() 并定义中断

修改用户定义的轴中断的展示设置

秤支持设置休息时间。这允许提供值向量或注入返回所需中断的函数。

date_breaks下面我们通过提供一个breaks语句替换(常规)和预配置的中断设置。

# ---------- coerce Time to character
df <- df %>% mutate(Time = as.character(Time)) 
# ---------- now make a Date column
df$Date <- as.Date(df$Time, "%d.%m.%Y")

# with the given data frame plot and set time axis
qplot(x= Date, y=  Mean1, group= SNH, data =  df) +
    geom_errorbar(aes(ymin = Mean1- Mean2,
                      ymax = Mean1 + Mean2),
                  width=0.2, size=1) + 
    # ------------- set a date scale and "configure" to your liking
    scale_x_date(  breaks = unique(df$Date)     # setting user defined breaks
                   ,minor_breaks = "1 day"      # keep minor breaks evenly spaced
                   ,date_labels = "%d %b"       # show day and month

这产生:

ggplot:为 scale_x_date() 设置用户定义的中断


推荐阅读