How to add bounding box to a specific area in ggplot2 heatmap?

前端 未结 1 1416
隐瞒了意图╮
隐瞒了意图╮ 2020-12-11 05:18

I use an example from here. My question is how can I add a specific bounding box to this heatmap, such as add a red line box to the top left four tiles?

requ         


        
相关标签:
1条回答
  • 2020-12-11 06:08

    A quick and dirty (some hard-coding) possibility is to use geom_rect, where the positions are given by the numerical values of the levels of x and y variables to be bound with a box, plus/minus an offset.

    ggplot(mymelt, aes(x = industry, y = variable, fill = value, label = value)) +
      geom_tile() +
      geom_text() +
      geom_rect(aes(xmin = 1 - 0.5, xmax = 2 + 0.5, ymin = 2 - 0.5, ymax = 3 + 0.5),
                   fill = "transparent", color = "red", size = 1.5)
    

    enter image description here

    A less hard-coded version:

    # convert x and y variables to factors
    ind <- as.factor(mymelt$industry)
    vars <- as.factor(mymelt$variable)
    
    # numeric version of the levels to be bound by a box
    xmin <- unique(as.numeric(ind[ind == "all industries"]))
    xmax <- unique(as.numeric(ind[ind == "cars"]))
    
    ymin <- unique(as.numeric(vars[vars == "americas"]))
    ymax <- unique(as.numeric(vars[vars == "europe"]))
    
    # set offset
    offset <- 0.5
    
    ggplot(mymelt, aes(x = industry, y = variable, fill = value, label = value)) +
      geom_tile() +
      geom_text() +
      geom_rect(aes(xmin = xmin - offset,
                    xmax = xmax + offset,
                    ymin = ymin - offset,
                    ymax = ymax + offset),
                fill = "transparent", color = "red", size = 1.5)
    
    0 讨论(0)
提交回复
热议问题