Re-ordering bars in R's barplot()

前端 未结 3 616
闹比i
闹比i 2020-12-06 02:25

What I want to achieve is exactly the same that was already asked here (and specifically using R\'s base graphics, not packages like ggplot or lattice

相关标签:
3条回答
  • 2020-12-06 02:36

    you can use ggplot to do this

    library("ggplot2")
    num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
    cat <- c(letters[1:10])
    data <- data.frame(num, cat)    
    ggplot(data,aes(x= reorder(cat,-num),num))+geom_bar(stat ="identity")
    

    The result is as shown below

    Using base functions

    df <- data[order(data$num,decreasing = TRUE),]
     barplot(df$num,names.arg = df$cat)
    

    0 讨论(0)
  • 2020-12-06 02:39

    Alternatively, you can also use the following if you don't want to put your data in a new dataframe. Just a little simpler.

    barplot(sort(data$num, decreasing = TRUE))
    
    0 讨论(0)
  • 2020-12-06 03:00

    I get the following,

    num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
    cat <- c(letters[1:10])
    data <- data.frame(num, cat)
    barplot(data[order(data[,1],decreasing=TRUE),][,1],names.arg=data[order(data[,1],decreasing=TRUE),][,2])
    

    The above code uses the order() function twice (see comments, below). To avoid doing this the results of the ordered data.frame can be stored in a new data.frame and this can be used to generate the barplot.

    num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
    cat <- c(letters[1:10])
    data <- data.frame(num, cat)
    data2  <- data[order(data[,1],decreasing=TRUE),]
    barplot(data2[,1],names.arg=data2[,2])
    
    0 讨论(0)
提交回复
热议问题