R:使用ggplot在单个图上绘制两个散点图

mkk*_*mkk 13 r ggplot2

请注意我是R的初学者.我已经使用merge()方法合并了两个数据框和一个公共列.我已经获得了如下数据框:

 x   y1   y2
 1   3    5
 2   2    4
 1   2    2
 3   5    5
 ...
Run Code Online (Sandbox Code Playgroud)

我想用ggplot绘制这样的数据框架.我创建的内容(使用geom_point的文档是

ggplot(data = dat_c, aes(games, variance.x)) + 
     geom_point(aes(x = games, y = variance.x), legend=  TRUE,  xlab="X", ylab="Y", colour=alpha('red', 0.05)) + 
     geom_point(aes(x = games, y = variance.y), legend = TRUE, colour=alpha('blue', 0.05) )
Run Code Online (Sandbox Code Playgroud)

它有效,NaNs不打扰我,因为我得到警告他们被忽略了,这很好.但是我有两个问题,我不知道如何解决它们:

  1. 我的实际情节位于左下角,我想设置X轴和Y轴的最大值(以动态方式,例如数据的最高值+ 100或类似的东西)
  2. 图例不显示
  3. 轴没有描述

以下是它的外观: 在此输入图像描述

Ben*_*ker 11

也可以看看:

(这些是搜索的结果[r] ggplot melt,尽管你也可能已经通过[r] ggplot legend......)

如果可以,请获取ggplot该书的副本并从头开始阅读 - 遗憾的是草案的PDF不再在线提供,但这本书值得投资.

  1. 你实际上有一些点xy值接近你的情节的极端.很难看到它们,因为它们几乎是透明的(在白色背景上看它们会更容易一些,即尝试添加+theme_bw()到你的ggplot通话中).你可以用xlimylim,如果你想限制情节的范围.(试试summary你的数据并查看最大值......)

  2. 获取轴的最佳方法是遵循将ggplot您的数据"熔化"成长格式数据集的惯用法,其中一列为该类别(y1vs y2),另一列为该值,如下所示:


  d <- data.frame(x=c(1,2,1,3),
                y1=c(3,2,2,5),
                y2=c(5,4,2,5))
  library(ggplot2) 
  library(reshape2) ## for melt()
  dm  <- melt(d,id.var=1)
  ggplot(data=dm,aes(x,value,colour=variable))+
  geom_point(alpha=0.2)+
  scale_colour_manual(values=c("red","blue"))+
  labs(x="games",y="variance")
Run Code Online (Sandbox Code Playgroud)

(对于略微奇怪的格式化而言我很抱歉)我将alpha值设置得更高,因为否则很难看到图中的点.我认为默认颜色(红色和蓝色)是可以的,但我曾经scale_colour_manual按照你指定的方式得到它们. 在此输入图像描述

  1. 我不确定你是什么意思.


Cha*_*ase 9

您应该melt将数据转换为长格式,然后将颜色美学映射到熔化的data.frame中的变量列.像这样的东西:

dat <- data.frame(x = c(1,2,1,3), y1 = c(3,2,2,5), y2 = c(5,4,2,5))

dat.m <- melt(dat, id.vars = "x")

ggplot(dat.m, aes(x, value, colour = variable)) +
  geom_point() +
  scale_colour_manual(values = c("red", "blue"))
Run Code Online (Sandbox Code Playgroud)

您可以分别使用xlim()和手动设置限制ylim().目前还不清楚你在使用alpha做什么,所以我会把那个留给你.