GitZine
GitZine

Reputation: 475

Interaction plot with multiple facets using ggplot

I am on R studio, and I am working on a graph that allows comparison between an input vector and what the database have.

The data looks like this:

Type   P1 P2   P3  
H1   2000 60 4000
H2   1500 40 3000
H3   1000 20 2000

The input vector for comparison will look like this:

Type   P1 P2   P3
   C 1200 30 5000

and I want my final plot to look like this:

enter image description here

The most important thing is a visual comparison between the input vector and the different types, for each P component. The scale of the y axis should adapt to each type of P, because there is big differences between them.

Upvotes: 1

Views: 262

Answers (1)

d.b
d.b

Reputation: 32548

library(dplyr)
library(tidyr)
library(ggplot2)

d %>% gather(var1, val, -Type) %>%
    mutate(input = as.numeric(d2[cbind(rep(1, max(row_number())),
                                       match(var1, names(d2)))]),
           slope = factor(sign(val - input), -1:1)) %>%
    gather(var2, val, -Type, -var1, -slope) %>%
    ggplot(aes(x = var2, y = val, group = 1)) +
    geom_point(aes(fill = var2), shape = 21) +
    geom_line(aes(colour = slope)) +
    scale_colour_manual(values = c("red", "blue")) +
    facet_grid(Type ~ var1)

DATA

d = structure(list(Type = c("H1", "H2", "H3"),
                   P1 = c(2000L, 1500L, 1000L),
                   P2 = c(60L, 40L, 20L),
                   P3 = c(4000L, 3000L, 2000L)),
              class = "data.frame",
              row.names = c(NA, -3L))
d2 = structure(list(Type = "C", P1 = 1200L, P2 = 30L, P3 = 5000L),
               class = "data.frame",
               row.names = c(NA, -1L))

Upvotes: 2

Related Questions