R - 使用ggplot2和两个不同大小的数据集

时间:2017-03-10 17:06:45

标签: r plot ggplot2

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

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

以下是一些示例数据:

SELECT * FROM service_provider WHERE id NOT IN (SELECT id FROM requests WHERE ongoing='0')

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

4 个答案:

答案 0 :(得分:0)

如果您提供示例数据集,这将更容易回答。但这是你可以做的(确保每个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()

这给你这个: enter image description here

答案 1 :(得分:0)

如果您想将所有数据绘制在一起,那么最好重塑您的数据。这是使用其他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()

答案 2 :(得分:0)

这是一个古老的问题,但是最近我已经使用比此处更快的方法解决了类似的问题

ggplot with 2 y axes on each side and different scales

也许您可以先按比例缩小一个数据集,然后尝试ggplot2中的“双y轴”功能,即

%nonassoc

其中p <– ggplot2(dataframe, ...)+... p + scale_y_continuous(name, ..., sec.axis = sec_axis(...)) 表示“第二轴” 请参阅 https://www.r-graph-gallery.com/line-chart-dual-Y-axis-ggplot2.html 有关详细信息。 R中的sec.axis也有帮助。

答案 3 :(得分:-1)

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

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