Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用ggplot在同一个图形上绘制多个数据帧_R_Ggplot2 - Fatal编程技术网

R 如何使用ggplot在同一个图形上绘制多个数据帧

R 如何使用ggplot在同一个图形上绘制多个数据帧,r,ggplot2,R,Ggplot2,我有36个不同的数据帧,其中包含dX和dY变量。我已经将它们存储在一个列表中,并希望以x=dX和y=dY在同一个图形上显示它们 36个数据帧不共享相同的dX值。它们大致覆盖相同的范围,但没有完全相同的值,因此使用合并会创建大量NA值。然而,行数是相同的 我尝试了一些几乎奏效的丑陋的东西: g <- ggplot() for (i in 1:36) { g <- g + geom_line(data = df.list[[i]], aes(dX, dY, colour = i))

我有36个不同的数据帧,其中包含dX和dY变量。我已经将它们存储在一个列表中,并希望以x=dX和y=dY在同一个图形上显示它们

36个数据帧不共享相同的dX值。它们大致覆盖相同的范围,但没有完全相同的值,因此使用合并会创建大量NA值。然而,行数是相同的

我尝试了一些几乎奏效的丑陋的东西:

g <- ggplot()
for (i in 1:36) {
  g <- g + geom_line(data = df.list[[i]], aes(dX, dY, colour = i))
}
print(g)
这里有几个问题:

  • “variable”总是等于dY。我所期望的是索引 列表中的数据帧(存储在L1中),甚至 更好的是,函数名的结果(i)
  • 曲线使用连续比例,范围从1到36,而我需要离散比例
  • 最后,使用geom_line()似乎不会单独绘制数据帧曲线,而是将不同数据集的点链接在一起

你知道如何解决我的问题吗?

看起来最简单的方法是创建一个数据框(如其中一位评论者所建议的),并使用源数据框的索引作为
颜色的索引:

library(dplyr) # For bind_rows() function

ggplot(bind_rows(df.list, .id="id"), aes(dX, dY, colour=id)) +
  geom_line()

在上面的代码中,
.id=“id”
导致
bind_rows
包含一个名为
id
的列,其中包含包含每个数据帧的列表元素的名称。

看起来最简单的选择是创建一个数据帧(如一位评论员所建议的那样)并使用
颜色的源数据帧索引:

library(dplyr) # For bind_rows() function

ggplot(bind_rows(df.list, .id="id"), aes(dX, dY, colour=id)) +
  geom_line()

在上面的代码中,
.id=“id”
会使
绑定行
包含一个名为
id
的列,其中包含包含每个数据帧的列表元素的名称。

我会将data.frame组合成一个大的data.frame,添加一个id列,然后使用ggplot进行打印。有很多方法可以做到这一点,这里有一个:

newDF <- do.call(rbind, list.df)
newDF$id <- factor(rep(1:length(df.list), each = sapply(df.list, nrow)))
g <- geom(newDF, aes(x = dX, y = dY, colour = id)
g <- g + geom_line()
print(g)

newDF我将把data.frame合并成一个大的data.frame,添加一个id列,然后用ggplot绘图。有很多方法可以做到这一点,这里有一个:

newDF <- do.call(rbind, list.df)
newDF$id <- factor(rep(1:length(df.list), each = sapply(df.list, nrow)))
g <- geom(newDF, aes(x = dX, y = dY, colour = id)
g <- g + geom_line()
print(g)

newDF循环方法的一个问题是根据
i
设置颜色。R将在i达到9或10后开始回收颜色,请参见以下示例:
绘图(1:20,col=1:20,pch=19)
。要更改颜色,您需要手动创建一个颜色向量来循环,通过它您可以从
colors()
中看到。这将返回RIt中所有可用的颜色,但实际上它不是在9或10之后循环,图形上只有一种颜色…您的数据具有相同的ColName吗?我将通过rbind data.frame列表创建一个唯一的data.frame,其中有一列存储数据源的编号(1到36)。然后我会用ggplotOK绘制这些数据,我明白你的意思了。尝试将col参数移到geom_行中aes选项之外<代码>g将颜色置于aes选项之外会有所帮助!我现在有很多颜色。。。但是没有传说。。。如何设置图例,使颜色与函数名(I)计算的名称相关联?循环方法的一个问题是将颜色设置为基于
I
更改。R将在i达到9或10后开始回收颜色,请参见以下示例:
绘图(1:20,col=1:20,pch=19)
。要更改颜色,您需要手动创建一个颜色向量来循环,通过它您可以从
colors()
中看到。这将返回RIt中所有可用的颜色,但实际上它不是在9或10之后循环,图形上只有一种颜色…您的数据具有相同的ColName吗?我将通过rbind data.frame列表创建一个唯一的data.frame,其中有一列存储数据源的编号(1到36)。然后我会用ggplotOK绘制这些数据,我明白你的意思了。尝试将col参数移到geom_行中aes选项之外<代码>g将颜色置于aes选项之外会有所帮助!我现在有很多颜色。。。但是没有传说。。。如何设置图例,使颜色与函数名(I)计算的名称相关联?