【问题标题】:Combining different data sources into one ggplot or lattice diagram将不同的数据源组合成一个 ggplot 或点阵图
【发布时间】:2017-04-06 12:44:18
【问题描述】:

在 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 和 lattice 能够通过第三个因素再次分离数据,并将它们可视化,如所愿。

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

【问题讨论】:

  • 不需要将所有数据合并到一个单独的data.frame中。 ggplot 对象的每一层/geom_ 都可以接受data = 提供的新数据,并在该层中通过mapping = aes(...) 具有特定于x、y、...的层。

标签: r ggplot2 lattice


【解决方案1】:

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

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

我使用的一般规则是,如果在同一个 geom_* 中使用不同的数据源,那么它们必须合并,如果它们将在不同的 geom_s 中使用,它们可以(并且也许应该)保持独立.

绑定数据源在同一个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))

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    相关资源
    最近更新 更多