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

时间:2011-08-25 14:49:51

标签: r ggplot2

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

 x   y1   y2
 1   3    5
 2   2    4
 1   2    2
 3   5    5
 ...

等。 我想用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) )

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

  1. 我的实际情节位于左下角,我想设置X和Y轴的最大值(以动态方式,例如数据的最高值+ 100或类似的东西)
  2. 未显示图例
  3. 未描述轴
  4. 以下是它的外观: enter image description here

2 个答案:

答案 0 :(得分:11)

另见:

(这些是搜索[r] ggplot melt的结果,尽管您也可能通过[r] ggplot legend来到那里......)

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

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

  2. 获取轴的最佳方法是遵循ggplot将您的数据“融化”成一个长格式数据集的习惯用法,其中包含一列(y1 vs y2)和另一个值,如下所示:


  3.   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")
    

    (抱歉有点奇怪的格式) 我将alpha值设置得稍高,否则很难看到图中的点。我认为默认颜色(红色和蓝色)是可以的,但我使用scale_colour_manual来按照您指定的方式获取它们。 enter image description here

    1. 我不确定你的意思。

答案 1 :(得分:8)

您应该将数据melt转换为长格式,然后将颜色美学映射到融化数据框架中的变量列。像这样:

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"))

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