一種方法是在調用ggplot
之前將數據裝箱。這裏是使用cut
函數來創建3小時間隔的一個示例:
# Load ggplot2 for plotting
library(ggplot2)
# Read in the data
df <- read.csv('SQF 2012.csv', header = TRUE)
# Create intervals every 3 hours based
# on the `timestop` variable
df$intervals <- cut(df$timestop,
breaks = c(0, 300, 600,
900, 1200, 1500,
1800, 2100, 2400))
# Re-order the sequence prior to plotting
df$sequence <- ifelse(df$intervals == '(600,900]', 1, NA)
df$sequence <- ifelse(df$intervals == '(900,1.2e+03]', 2, df$sequence)
df$sequence <- ifelse(df$intervals == '(1.2e+03,1.5e+03]', 3, df$sequence)
df$sequence <- ifelse(df$intervals == '(1.5e+03,1.8e+03]', 4, df$sequence)
df$sequence <- ifelse(df$intervals == '(1.8e+03,2.1e+03]', 5, df$sequence)
df$sequence <- ifelse(df$intervals == '(2.1e+03,2.4e+03]', 6, df$sequence)
df$sequence <- ifelse(df$intervals == '(0,300]', 7, df$sequence)
df$sequence <- ifelse(df$intervals == '(300,600]', 8, df$sequence)
df$sequence <- as.numeric(df$sequence)
# Create the plot
ggplot(df, aes(x = sequence)) +
geom_histogram(binwidth = 0.5) +
scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7, 8),
labels = c('6AM-9AM', '9AM-12PM', '12PM-3PM', '3PM-6PM',
'6PM-9PM', '9PM-12AM', '12AM-3AM', '3AM-6AM')) +
xlab('Time') +
ylab('Number\n') +
theme(axis.text = element_text(size = rel(1.1))) +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
theme(axis.title = element_text(size = rel(1.1), face = 'bold'))

非常感謝,這正是我一直在尋找! – 2014-10-30 16:11:57