朝阳图-生成两个以上的环时出错

时间:2019-07-19 04:32:13

标签: r ggplot2 formatting conditional-statements

我有这个数据集,想生成一个朝阳图。数据分为4列,分别是单位,重量,year16和year17。朝阳基于重量列中的值。代码在那里,在添加第三层的代码时给我一个错误。我认为添加第三层时会出现错误。

    library("ggnewscale")
    library(ggplot2)
    #read file
    weight.eg = read.csv("Dummy Data.csv", header = FALSE, sep = 
    ";",encoding = "UTF-8") 

    #change column names
    colnames(weight.eg) <- c 
    ("unit","weight","year16","year17")

    #check the class
    sapply(weight.eg, class)
    #View(weight.eg)

    #as weight column is factor change into integer
    weight.eg$weight = as.numeric(levels(weight.eg$weight)) 
    [as.integer(weight.eg$weight)]
    weight.eg$year16 = as.numeric(levels(weight.eg$year16)) 
    [as.integer(weight.eg$year16)]
    weight.eg$year17 = as.numeric(levels(weight.eg$year17)) 
    [as.integer(weight.eg$year17)]
    #Nas are introduced, remove
    weight.eg <- na.omit(weight.eg)

    #Sum of the total weight
    sum_total_weight = sum(weight.eg$weight)
    #First layer
    firstLevel = weight.eg %>% summarize(total_weight=sum(weight))

    cs_fun <- function(x){(cumsum(x) + c(0, cumsum(head(x , -1))))/ 2}

    ggplot(weight.eg) +
    geom_col(data = firstLevel,
           aes(x = 1, y = total_weight)) +
    geom_text(data = firstLevel,
            aes(x = 1, y = total_weight / 2, 
                label = paste("Total Weight:", total_weight)),
            colour = "black") +
    geom_col(aes(x = 2, 
               y = weight, fill = weight),
           colour = "black", size = 0.6) +
    scale_fill_gradient(name = "Weight", 
                      low = "white", high = "lightblue") +
    # Open up new fill scale for next ring
    new_scale_fill() +
    geom_text(aes(x = 2, y = cs_fun(weight), 
                label = paste(unit, weight))) +
    geom_col(aes(x = 3, y = weight, fill = year16), 
             size = 0.6, colour = "black") +
    scale_fill_gradient(name = "Year16", 
                      low = "red", high = "green") +
    geom_text(aes(label = paste0(unit,year16), x = 3, 
                y = cs_fun(weight))) +
    #next ring
    new_scale_fill() +
    geom_text(aes(x = 2, y = cs_fun(weight), 
                label = paste(unit, weight))) +
    geom_col(aes(x = 4, y = weight, fill = year17), 
           size = 0.6, colour = "black") +
    scale_fill_gradient(name = "Year17", 
                      low = "red", high = "green") +
    geom_text(aes(label = paste0(unit,year17), x = 4, 
                y = cs_fun(weight))) +
    coord_polar(theta = "y")

dput(weight.eg)的输出为

     structure(list(unit = structure(1:6, .Label = c("A", "B", "C", 
    "D", "E", "F", "Unit"), class = "factor"), weight = c(30, 25, 
    10, 17, 5, 13), year16 = c(70, 80, 50, 30, 60, 40), year17 = c(50, 
    100, 20, 30, 70, 60)), .Names = c("unit", "weight", "year16", 
    "year17"), row.names = 2:7, class = "data.frame", na.action = 
    structure(1L, .Names = "1", class = "omit"))

我也想包括year17,将来还会有      列,因此也必须添加。由于错误我      无法找出问题所在。

0 个答案:

没有答案