在ggplot2中显示多个数据帧

时间:2016-07-28 00:27:55

标签: r plot dataframe ggplot2 formula

我正在尝试使用#set( $name = ${NAME} ) <?php class ${NAME} extends Model{ protected \$table = '$name.toLowerCase()'; } x = index在一个行图中对多个数据框进行分层。我使用的8个data.frames采用这种格式(索引和值),长度为几百行:

y = values

由于数据框的大小并不相同,我也试图通过将数据转换为百分比(索引/值总数)* 100来调整数据集的大小,我应该将它放在绘图代码中还是我应该在绘图之前更好地转换数据集吗?

希望StackOverflow的hivemind可以帮助R新手

2 个答案:

答案 0 :(得分:3)

如果您希望将它们全部放在一个图中,那么如果您首先“堆叠”数据帧并包含一个标识数据来自哪个原始数据帧的列,那将是最简单的。

library(dplyr)
library(ggplot2)

首先创建虚假数据。下面的代码创建一个包含八个数据帧的列表。我们假设这是我们在读入数据后开始的地方。如果您从单独的文件(例如csv文件)中读取数据框,只需将它们全部读入一个列表,然后使用bind_rows将它们堆叠起来:

# Fake data
set.seed(954)
df = lapply(paste0("d",0:7), function(x) {
  n=sample(seq(100,500,100),1)
  data.frame(source=x, index=1:n, values=cumsum(rnorm(n)))
})

# Stack the eight data frames into a single data frame
df = bind_rows(df)

使用ggplot进行绘图。我们使用source(原始数据框的名称)作为colour美学:

ggplot(df, aes(index, values, colour=source)) +
  geom_line() +
  theme_bw()

enter image description here

或者,如果您想将index标准化为每个数据框的相同范围:

ggplot(df %>% group_by(source) %>%
         mutate(index = index/max(index)), 
       aes(index, values, colour=source)) +
  geom_line() +
  theme_bw()

enter image description here

更新:在回复您的评论时,如果您已有数据框,则可以执行此操作以获取单个数据框:

df=lapply(paste0("sign",1:8), function(x) {
  data.frame(source=x, get(x))
})

df=bind_rows(df)

但是你必须在某个时候将数据读入R中,当你将数据文件读入R时,你可以处理这种类型的处理。

答案 1 :(得分:0)

不需要蜂巢:

d0 <- data.frame(index = 1:100, values = rnorm(100))
d1 <- data.frame(index = 1:200, values = rnorm(200))
d2 <- data.frame(index = 1:100, values = rnorm(100))
d3 <- data.frame(index = 1:100, values = rnorm(100))
d4 <- data.frame(index = 1:100, values = rnorm(100))
d5 <- data.frame(index = 1:500, values = rnorm(500))
d6 <- data.frame(index = 1:100, values = rnorm(100))
d7 <- data.frame(index = 1:100, values = rnorm(100))

require(ggplot2)
p0 <- ggplot(d0, aes(x=index, y=values)) + geom_point(alpha=.3)
p1 <- ggplot(d1, aes(x=index, y=values)) + geom_point(alpha=.3)
p2 <- ggplot(d2, aes(x=index, y=values)) + geom_point(alpha=.3)
p3 <- ggplot(d3, aes(x=index, y=values)) + geom_point(alpha=.3)
p4 <- ggplot(d4, aes(x=index, y=values)) + geom_point(alpha=.3)
p5 <- ggplot(d5, aes(x=index, y=values)) + geom_point(alpha=.3)
p6 <- ggplot(d6, aes(x=index, y=values)) + geom_point(alpha=.3)
p7 <- ggplot(d7, aes(x=index, y=values)) + geom_point(alpha=.3)

require(Rmisc)
multiplot(p0, p1, p2, p3, p4, p5, p6, p7, cols=2)

enter image description here