制作圆形堆积条形图

时间:2021-01-25 20:07:38

标签: r bar-chart stacked

enter image description here

我想绘制一个圆形堆积条形图,其中组为 YEAR, 每个观察值的值为 count

观察值是 ORIGENFROM 列。因此,每个 ORIGEN 必须包含每个“FROM”观察,f.example,来自 HOSPITAL 的样本可能来自:ER,一个特定的单位或其他地方。我希望 Hospital(或其他 ORIGEN)的每个条形图根据“FROM”(急诊室、出口等)以不同的颜色显示。

我尝试了下一个,显然我失败了!

data <- isolate_from.ORIGEN %>% gather(key = "observation", value="value", -c(1,2)) 

#isolate_from.ORIGEN

# Set a number of 'empty bar' to add at the end of each group

empty_bar <- 2
nObsType <- nlevels(as.factor(data$observation))
to_add <- data.frame( matrix(NA, empty_bar*nlevels(data$YEAR)*nObsType, ncol(data)) )
colnames(to_add) <- colnames(data)
to_add$YEAR <- rep(levels(data$YEAR), each=empty_bar*nObsType )
data <- rbind(data, to_add)
data <- data %>% arrange(YEAR, FROM)
data$id <- rep( seq(1, nrow(data)/nObsType) , each=nObsType)


# Get the name and the y position of each label

    label_data <- data %>% group_by(id, observation) %>% summarize(tot=sum(count))
    number_of_bar <- nrow(label_data)
    angle <- 90 - 360 * (label_data$id-0.5) /number_of_bar     # I substract 0.5 because the letter must have the angle of the center of the bars. Not extreme right(1

) or extreme left (0)
label_data$hjust <- ifelse( angle < -90, 1, 0)
label_data$angle <- ifelse(angle < -90, angle+180, angle)
 

# prepare a data frame for base lines

base_data <- data %>% 
  group_by(YEAR) %>% 
  summarize(start=min(id), end=max(id) - empty_bar) %>% 
  rowwise() %>% 
  mutate(title=mean(c(start, end)))
 

# prepare a data frame for grid (scales)

grid_data <- base_data
grid_data$end <- grid_data$end[ c( nrow(grid_data), 1:nrow(grid_data)-1)] + 1
grid_data$start <- grid_data$start - 1
grid_data <- grid_data[-1,]

我无法在 R 中制作图形,因为出现错误。

谢谢

0 个答案:

没有答案