将不同的数据源组合成一个ggplot或晶格图

时间:2017-04-06 12:44:18

标签: r ggplot2 lattice

在R中,ggplot2lattice包都提供了可视化数据的可能性,不仅可以通过xy位置来查看数据,还可以考虑其他因素,更改颜色,观察表示的大小或形状(点,平滑线等)或将可视化分割为沿此因子的单独图表。

ggplot的示例:

require(ggplot2)
ggplot(diamonds, aes(x = carat, y = price, col=clarity)) +
  geom_point(alpha = .3)

lattice的示例:

require(lattice)
require(mlmRev); data(Chem97, package = "mlmRev")
densityplot(~ gcsescore | factor(score), Chem97, groups = gender,
            plot.points = FALSE, auto.key = TRUE)

显然,这些非常简单的方法可以将数据与另一个因素区分开来,以便与单个数据帧一起使用,其中包含要显示的所有观察结果。但是,我经常以单独的数据帧的形式具有单独的数据输入,包含要表示为x和y的不同列。然后,在图中分离的第三个因素是数据帧。数据源本身。到目前为止,我能找到的唯一解决方案是将所有数据合并到一个数据帧中,然后在每个源数据帧中添加另一个列,仅包含第三个因子resp。数据源(因此在此列的每个单元格中都有相同的字符串表达式)。最后,ggplot2和格子然后能够通过第三个因子再次分离数据,并按照希望分离它们。

现在到了最后的问题:这似乎是一个非常糟糕的工作流程,对于更大量的数据效率不高。是否有另一种方法可以实现相同的结果,或者至少是一种有效自动化最后描述的工作流程的方法?

1 个答案:

答案 0 :(得分:0)

使用ggplot时,将更多数据源合并为一个通常是个好主意。当然有例外,ggplot提供了处理这种情况的工具。

也就是说,可以将data参数传递给每个geom_*

我使用的一般规则是,如果在同一geom_*中使用不同的数据源,则必须将它们组合在一起,如果它们将在不同的geom_中使用,它们可以(并且可能)应该保持分开。

绑定要在同一geom_*

中使用的数据源
df1 <- data.frame(group = LETTERS[1:3],
                  obs = runif(3))

df2 <- data.frame(group = LETTERS[1:3],
                  obs = runif(3))

library(purrr)
dfT <- list(df1 = df1, df2 = df2) %>% 
    map_df(~rbind(.x), .id = 'src')


library(ggplot2)
ggplot(dfT, aes(x = group, y = obs)) +
    geom_line(aes(group = src, color = src), size = 1)

使用不同的数据源

df1 <- data.frame(group = LETTERS[1:3],
                  hValue = runif(3))

df2 <- data.frame(group = rep(LETTERS[1:3], each = 3),
                  pValue = runif(9))
library(ggplot2)
ggplot() +
    geom_line(data = df1, aes(x = group, y = hValue, group = 1), size = 1) +
    geom_point(data = df2, aes(x = group, y = pValue, color = group))