使用 ggplot2, R 在圆形图上绘制因子的非重叠水平

use*_*688 2 plot r histogram ggplot2

我正在尝试创建一个圆形图来显示数据集中的月份显示频率/计数,但我也想按季节对月份进行分组。这是一天中时间的类似图,现在我想使用相同的方法来绘制月份/季节。但是,出于某种原因,我似乎无法指定正确的选项来将我的比例分成不重叠的月份类别。任何建议都非常感谢。

library(lubridate)
library(ggplot2)   # use at least 0.9.3 for theme_minimal()
library(circular)

### PLOT FOR HOURS ###

## generate random data in POSIX date-time format
set.seed(44)
N=500
events <- as.POSIXct("2011-01-01", tz="GMT") + 
  days(floor(365*runif(N))) + 
  hours(floor(24*rnorm(N))) +  # using rnorm here
  minutes(floor(60*runif(N))) +
  seconds(floor(60*runif(N)))

# extract hour with lubridate function
hour_of_event <- hour(events)
# make a dataframe
eventdata <- data.frame(datetime = events, eventhour = hour_of_event)
# determine if event is in business hours
eventdata$Workday <- eventdata$eventhour %in% seq(6, 18)

ra<-length(eventdata[,2])

for (i in 1:ra){

  if(eventdata[,3][i]=="TRUE"){eventdata$diel[i]<-"day"}else{eventdata$diel[i]<-"night"}

}

# Plot

ggplot(eventdata, aes(x = eventhour, fill = diel)) + 
  geom_histogram(breaks = seq(0,24), width = 2, colour = "grey") + 
  coord_polar(start = 0) + theme_minimal() + 
  scale_fill_brewer() + ylab("Count") + ggtitle("Events by Time of day") + 
  scale_x_continuous("", limits = c(0, 24), breaks = seq(0, 24), labels = seq(0,24))
Run Code Online (Sandbox Code Playgroud)

这是我尝试按月/季做一个情节,

### PLOT FOR MONTHS ###

head(events)

# extract hour with lubridate function
month_of_event <- month(events)

# make a dataframe
eventdata <- data.frame(datetime = events, months = month_of_event)

# classify months into seasons
summer<-c(1,2,12)
fall<-c(3,4,5)
winter<-c(6,7,8)
spring<-c(9,10,11)

season.names <- rep("",12)
season.names[summer] <- "Summer"
season.names[fall] <- "Fall"
season.names[winter] <- "Winter"
season.names[spring] <- "Spring"
season.names

eventdata$season<-season.names[eventdata$months]
str(eventdata)

# Plot  

ggplot(eventdata, aes(x = months, fill = season)) + 
  geom_histogram(breaks = seq(0,12, by=1), width = 4) + 
  coord_polar(start = 0) + theme_minimal() + 
  scale_fill_brewer() + ylab("Count") + 
  scale_x_continuous("", limits = c(0, 12), breaks = seq(0, 12), labels = seq(0,12))
Run Code Online (Sandbox Code Playgroud)

rns*_*nso 5

以下简单版本有效:

ggplot(eventdata, aes(x = factor(months), fill = season)) + 
  geom_histogram()+
  coord_polar()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明