分面网格按因子和持续时间

我正在尝试生成一个ggplot,该图显示了鸟每天响应4种处理方式(按Block分组)之一花在某个位置上的时间。有6个街区。在两个小时的时间内,在不同的一天进行每种治疗。

第一个问题是,使用facet_grid时,每个区块的所有数据点都在每个区块的第一个日期分组,而不是分布在该区块内的四天内。

其次,尽管阅读了各种教程,但我仍无法弄清楚如何处理持续时间(变量= Total.Time),即鸟类出现的分钟和秒数。我想使用Total.Time_mins变量来显示在网站上进行勘探所花费的总时间(分钟和秒)。刻度显然不正确,因为15分钟和2秒之间的差值应该明显更大。电子表格中的时间数据输入为HH:MM:SS。

我已附上图表的副本,其中显示了相应的问题:

分面网格按因子和持续时间

下面在创建的变量中提供了数据样本,这些变量标记为Date,Total.Time_mins和Treatment

Dates <- as.Date(c("0019-10-07","0019-10-08","0019-10-09","0019-10-10","0019-10-11","0019-10-12","0019-10-13","0019-10-14","0019-10-15","0019-10-16","0019-10-17"))
Total.Time <- c("0:02:27","0:00:16","0:00:22","0:00:03","0:00:00","0:00:20","0:01:32","0:09:11","0:00:30","0:07:26","0:00:59","0:14:13")
Treat <- c("Playback","Control","Decoys & Playback","Decoys","Playback","Decoys & Playback")
Blocks <- c("1","1","2","3","3")
Data1 <- data.frame(Dates,Total.Time,Treat,Blocks)

这是我到目前为止生成的代码。

[names(Data)
 \[1\] "Dates"                 "Blocks"                "Treat"            "Observation"          "Total.Time"     
 \[6\] "Time"                 "Max_Birds"            "Landing"              "Wind_Speed"           "Beaufort_Force_Scale"
\[11\] "Wind_Direction" 

# Convert the date information into R's date format.  R will automatically treat these dates as numeric in our analyses.
Data$Date <- as.Date(Data$Date,format = "%d/%m/%Y")

# Create GGPlot of time spent prospecting over site
p = ggplot(Data1,aes(Dates,fill=Treat)) + geom_bar(stat = "identity") 
p = p + facet_grid(.~ Blocks)
p = p + scale_fill_grey(start=0.8,end=0.0)
p = p + theme(panel.background = element_blank())
p = p + theme(axis.text.x=element_text(size=16,vjust=0.6),axis.title.x=element_text(face="bold",size=16,vjust=-6),axis.title.y=element_text(face="bold",size=16),axis.text.y=element_text(size=16),legend.text = element_text(size=12),axis.line=element_line())
p = p + theme(axis.text.x=element_text(size=16,vjust=0.6)) 
#p = p + scale_x_date(date_labels="%d %b",date_breaks = "4 day",breaks = 4)
p = p + theme(axis.text.x = element_text(face="bold",size=10,angle=90))
p
frazer999 回答:分面网格按因子和持续时间

ggplot具有scale_y_time,可与hms包中的hms类对象一起使用。如果您转换为该类,它将被自动使用。

Data1$total_time_hms = hms::as_hms(as.character(Data1$Total.Time))

ggplot(Data1,aes(Dates,total_time_hms,fill=Treat)) +
  geom_col()  +
  facet_grid(. ~ Blocks) +
  scale_fill_grey(start=0.8,end=0.0) +
  scale_x_date(date_labels="%d %b",date_breaks = "4 day",breaks = 4)

enter image description here

我也是

  • 删除了所有theme选项,因为它们似乎与问题无关
  • 切换到geom_col而不是geom_bar(stat = "identity")
  • 看不清您的意思。“每个区块的所有数据点都在每个区块的第一个日期进行分组,而不是分布在该区块内的四天内。” (也许您不希望每个x轴都满刻度吗?您可以将facet_grid替换为facet_wrap(~ Blocks,scales = "free_x") ...,但是由于您的示例数据每块有4天,因此您明确要求中断每四天一次,则条形图将围绕单个轴中断/标签聚集)
本文链接:https://www.f2er.com/3120627.html

大家都在问