Order data inside a geom_tile

后端 未结 2 1965
长发绾君心
长发绾君心 2020-12-03 15:11

i have a data frame and i want to generate a geom_tile() plot from it , but I want the graph to be ordered not based on the alphabetic but based on a variable i

相关标签:
2条回答
  • 2020-12-03 15:23

    As an answer to the duplicate question, here's a solution that uses ggplot directly and does not require changing the data.

    x <- structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"), 
                        V2 = c("r", "w", "q", "m", "l", "q", "g"), 
                        V3 = c( "5", "2", "9", "2", "1", "3", "0")), 
                   .Names = c("V1", "V2", "V3"), class = "data.frame", 
                   row.names = c(NA, -8L))
    
    x <- x[1:7,]
    
    ggplot(x, aes(V1, V2, fill=V3)) + geom_tile() +
      scale_x_discrete(limits=(x$V1)[order(x$V3)]) + 
      scale_y_discrete(limits=(x$V2)[order(x$V3)])
    
    0 讨论(0)
  • 2020-12-03 15:32

    I usually try to use levels to fix my data before hand:

    x <- structure(list(V1 = c("a", "y", "w", "p", "v", "h", "i"), 
        V2 = c("r", "w", "q", "m", "l", "q", "g"), V3 = c( 
        "5", "2", "9", "2", "1", "3", "0")), .Names = c("V1", "V2", 
    "V3"), class = "data.frame", row.names = c(NA, -8L))
    
    x <- x[1:7,]
    
    x$V1 <- factor(x$V1, levels=(x$V1)[order(x$V3)])
    
    # Note it's not an ordered factor, it's a factor in the right order
    
    ggplot(x, aes(V1, V3)) + geom_tile()
    

    enter image description here

    UPDATE:

    Still not exactly clear on your dimensions, but perhaps something like:

    x$V2 <- factor(x$V2, levels=(x$V2)[order(x$V3)])
    
    ggplot(x, aes(V1,V2,fill=V3)) + geom_tile() 
    

    enter image description here

    0 讨论(0)
提交回复
热议问题