【问题标题】:R - Using ggplot2 with two data sets of different sizesR - 使用 ggplot2 和两个不同大小的数据集
【发布时间】:2017-03-10 17:06:45
【问题描述】:

我想为两个不同大小的数据集做一个散点图。

假设我有两个 data.frames:df1、df2。 df1 的行大小为 100,df2 的行大小为 50。有没有办法用 ggplot2 做散点图?我已经搜索但找不到任何东西。在线教程总是假设数据集大小相同,x 轴的值相同。另外,我想在同一个图中绘制两个数据集,而不是并排。

以下是一些示例数据:

df1<-data.frame(X1=1:10,Y11=11:20,Y12=21:30,Y13=31:40)

df2<-data.frame(X2=1.5:10.5,Y21=1.5:10.5)

让我们假设 X1 是一列,其值以公里为单位测量距离。 Y11 是具有 Car1 燃料消耗值的向量,Y12 是具有 Car2 燃料消耗值的向量,依此类推。现在 X2 仍然是矢量,其值以公里为单位测量距离,与 X1 不同,但在相同的范围内。 Y21 是改装 Car1 的油耗。我想把它们放在同一个散点图中,x轴是距离(km),y轴是油耗

【问题讨论】:

  • 这应该没问题。只需将数据直接传递给geom_point() 层。如果您向reproducible example 提供示例输入数据和您尝试过的代码,将会很有帮助。然后我们可以提供具体的修复。
  • @MrFlick 我已经编辑了问题并包含了一些数据。我没有写我用过的代码,因为我一开始就失败了,我们只需要给 ggplot 命令一个 data.frame。
  • 您想从样本数据中具体绘制哪些值?尚不清楚您希望如何使用 4 列来可视化 df1
  • @MrFlick 我想在同一张图中绘制 (X1,Y11),..., (X1, Y13) 类型的点以及 (X2,Y21) 类型的点
  • 但是您想将 df1 中的所有这些值都视为“一个”散点图吗?你基本上想忽略列?我对这里所需的输出越来越感到困惑。

标签: r plot ggplot2


【解决方案1】:

如果您提供示例数据集,这将更容易回答。但您可以这样做(确保每个 data.frame 具有相同的列名):

df1 <- data.frame(x = 1:50, y = 1:50)
df2 <- data.frame(x = 100:1, y = 1:100)

df1$cat <- "df1"
df2$cat <- "df2"

df <- rbind(df1, df2)

library(ggplot2)
ggplot(df, aes(x, y, color = cat))+
  geom_point()

这给了你这个:

【讨论】:

  • 非常感谢您的回答。我已经编辑了这个问题,以便更准确地反映我的问题。很抱歉以前没有这样做。在我的情况下,我有两个具有不同列和行的 data.frames...
【解决方案2】:

如果您想将所有数据绘制在一起,那么最好重塑您的数据。这是使用其他 tidyverse 函数的示例

library(tidyr)
library(dplyr)

dd <- bind_rows(
  df1 %>% gather(car, mpg, -X1) %>% rename(X=X1),
  df2 %>% gather(car, mpg, -X2) %>% rename(X=X2)
)

ggplot(dd, aes(X, mpg, color=car)) + geom_point()

【讨论】:

    【解决方案3】:

    这是一个老问题,但最近我用比这里更快的方法解决了一个类似的问题

    ggplot with 2 y axes on each side and different scales

    也许你可以先把其中一个数据集缩小,然后试试ggplot2中的“双y轴”功能,即,

    p <– ggplot2(dataframe, ...)+...
    p + scale_y_continuous(name, ..., sec.axis = sec_axis(...))
    

    其中sec.axis 表示“第二个轴” 请参阅 https://www.r-graph-gallery.com/line-chart-dual-Y-axis-ggplot2.html 详情。 R 中的?sec_axis 也有帮助。

    【讨论】:

      【解决方案4】:

      感谢 MrFrick 的评论,我想我明白了。

      ggplot(data=df1) + geom_point(aes(x=X1,y=Y11, 
                                color="Car1"))+
        geom_point(data=df2,aes(x=X2,y=Y21),color="ModCar2"))
      

      【讨论】:

      • 好的,是的。如果您只想从每个看起来不错的数据集中绘制 2 个列。我什至可以将data=df1 移出ggplot() 并移入第一个geom_point() 以更清楚地了解发生了什么。
      • @MrFlick 我试过了,但它给出了一个错误警告«无法处理数据 uneval»。所以我把它放在里面。
      猜你喜欢
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 2016-08-25
      • 2021-09-11
      • 1970-01-01
      • 2020-01-06
      相关资源
      最近更新 更多