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

I use the example from here . My question is how to add a specific bounding box for this heat map, for example add a red line to the top left four tiles?

require(ggplot2)
require(reshape)
require(scales)

mydf <- data.frame(industry = c('all industries','steel','cars'), 
    'all regions' = c(250,150,100), americas = c(150,90,60), 
     europe = c(150,60,40), check.names = FALSE)
mydf

mymelt <- melt(mydf, id.var = c('industry'))
mymelt

ggplot(mymelt, aes(x = industry, y = variable, fill = value)) +
    geom_tile() + geom_text(aes(fill = mymelt$value, label = mymelt$value))

enter image description here

+4
source share
1 answer

The quick and dirty (some hard coding) possibility is to use geom_rect, where the positions are determined by the numerical values ​​of the levels of the variables x and y, which should be associated with the field, plus / minus the 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

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)
+7
source

Source: https://habr.com/ru/post/1528821/


All Articles