【问题标题】:How can I plot two series from different data frames against each other with ggplot2 in R without building a new data frame?如何在不构建新数据框的情况下使用 R 中的 ggplot2 绘制来自不同数据框的两个系列?
【发布时间】:2015-11-26 02:05:27
【问题描述】:

假设我有两个数据框

df1 = data.frame(x=1:10)
df2 = data.frame(x=11:20)

我想要一个散点图,这两个系列定义了坐标。做起来很简单

plot(df1$x,df2$x)

就我目前所知的 ggplot2 而言,我也可以做到

df = data.frame(x1 = df1$x, x2 = df2$x)
ggplot(data = df, aes(x=x1, y=x2)) + geom_point()
rm(df)

但这(对我而言)比不创建新数据框要慢,难以阅读,并且可能导致错误增加(删除错误的数据框,覆盖所需的数据框,忘记删除多余的数据框杂乱无章等)。我真的需要创建一个单独的数据框来容纳已经存在的数据吗?为什么下面的第一行只列出了“数据”下的一个数据框,而第二行却没有?

ggplot(data = df1, aes(x=df1$x, y=df2$x)) + geom_point()
ggplot(            aes(x=df1$x, y=df2$x)) + geom_point()

这是我想要的基本示例图像:

【问题讨论】:

  • ggplot(data.frame(x=df1$x, y=df2$x), aes(x,y)) + geom_point() 怎么样?
  • 如果您坚持不创建另一个data.frame,您可以执行以下操作,ggplot() + geom_point(aes(x=df1$x, y=df2$x))ggplot(data=NULL, aes(x=df1$x, y=df2$x)) + geom_point()
  • 这三个都有效。
  • @randy 你知道 ggplot 只是在制作另一个数据框,对吧?
  • 当然,但是来自使用 plot(df1$x,df2$x) 并尝试将我的代码转换为使用 ``ggplot` 是一场噩梦,如果我需要占用我的一百个 4000x100维度数据框对应于不同的实验,然后管理数千个仅为个别地块构建的数据框。

标签: r plot ggplot2 dataframe


【解决方案1】:

以下任何一行(全部取自 cmets)都应该有效:

ggplot(data=data.frame(x=df1$x, y=df2$x), aes(x,y)) + geom_point()

ggplot() + geom_point(aes(x=df1$x, y=df2$x))

ggplot(data=NULL, aes(x=df1$x, y=df2$x)) + geom_point()

ggplot(data=df1, aes(x=x)) + geom_point(aes(y=df2$x))

我更喜欢最后一行(取自已删除的评论)。正如 cmets 中提到的问题,ggplot() 无论如何都会创建一个data.frame。这些解决方案的作用是允许用户在某种程度上忽略数据管理的这一方面(诚然,某些用户会觉得厌恶)。

【讨论】:

  • 我有同样的问题@randy。但是我需要将每个数据框中的多个列放在同一个图上。我应该如何绘制它?
  • 你能澄清你的问题吗,@Jack?这可能需要一个新问题。
  • Jack,您可以分别为每个几何图形指定数据和美学参数。
【解决方案2】:

这将是一个评论,但我还不够有名气。

你也可以试试qplot(x = df1$x, y = df2$x)。请注意,从?qplot 开始,如果未设置 data 参数,qplot 将从提供的输入中为您创建一个数据框。

【讨论】:

  • ggplot 也会创建一个数据框,即使您指定了一个数据框。 qplot 是 ggplot 中的初级恶魔衍生品,不应使用 rly (在即将更新的官方 ggplot2 书中强调了这一事实)。
猜你喜欢
  • 1970-01-01
  • 2019-12-30
  • 2021-02-10
  • 2019-09-18
  • 2021-11-10
  • 2018-04-08
  • 2023-03-08
  • 1970-01-01
  • 2013-06-30
相关资源
最近更新 更多