我正在尝试使用ggplot绘制一夜间海龟筑巢活动的分布情况,但我想将时间从上午8点到下午6点排除。另外,我需要x轴从晚上7点开始,到早上7点结束。
我的代码是
ggplot(sub.1) + geom_bar(aes(x = sub.1$time)) + scale_x_continuous(expand = c(0, 0), limits = c(0, 23), breaks = seq(0, 23, 1)) + xlab("Hour") + ylab ("Frequency")
真的很感激任何帮助。
答案 0 :(得分:1)
试试这个。当我有机会时,我会在那里发表一些评论。希望它有所帮助!
# Example Data
SampleHours <- sample(1:23, 3000, replace = TRUE)
# Keep wanted Hours
IncludedHours <- c(19:23, 1:7)
Index <- SampleHours %in% IncludedHours
# Create dataframe
sub.1 <- data.frame(Hour = SampleHours[Index])
# Change the factor levels
sub.1$Hour <- as.factor(sub.1$Hour)
FactorLevels <- c(19:23, 1:7)
levels(sub.1$Hour) <- FactorLevels
# Plot
library(ggplot2)
ggplot(sub.1) +
geom_bar(aes(x = sub.1$Hour)) +
xlab("Hour") +
ylab ("Frequency")
修改强>
更改了部件以确定要保留的小时数,而不是要排除的小时数。我认为这样可以更容易理解
答案 1 :(得分:1)
我的方法使用dplyr
。首先,我生成了一些假数据:
times = sample(seq(0,23), 10000, replace=T)
nest = sample(c(0,1), 10000, replace=T)
data = data.frame(times, nest)
然后,我使用dplyr
来管道结果:
library(dplyr)
data %>% filter(times>18 | times<8) %>%
transform(times=factor(times, levels=c(19:23,0:7))) %>%
ggplot() + geom_bar(aes(x=times)) +
xlab("Hour") +
ylab ("Frequency")
filter
来电选择小时数; transform
与@William做同样的操作来创建订单19-7。