使用ggplot的多个方面的交互图

时间:2019-09-20 15:49:54

标签: r ggplot2

我在R studio上,并且正在制作一个图形,该图形允许比较输入向量和数据库的内容。

数据如下:

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

用于比较的输入向量将如下所示:

Type   P1 P2   P3
   C 1200 30 5000

我希望我的最终情节看起来像这样:

enter image description here

最重要的是,对于每个P分量,在输入向量和不同类型之间进行视觉比较。 y轴的标度应适应每种类型的P,因为它们之间存在很大差异。

1 个答案:

答案 0 :(得分:2)

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)

数据

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