【问题标题】:R: two scatterplots on single graph using ggplotR:使用ggplot在单个图上绘制两个散点图
【发布时间】:2011-08-25 14:49:50
【问题描述】:

请注意我是 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) )

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

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

下面是它的样子:

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    另见:

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

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

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

    2. 绘制坐标轴的最佳方法是遵循ggplot 的习语,将数据“融合”成一个长格式数据集,其中一列用于该类别(y1y2)另一个是值,如下:


      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 以按照您指定的方式获取它们。

    1. 我不确定你的意思。

    【讨论】:

    • 非常感谢您的回答。最后一点是关于 X 和 Y 轴的标签 - 你已经用 labs() 方法覆盖了它,我不知道(我试过 xlab 和 ylab)。
    • 好的。如果你这样做 +xlab("games")+ylab("variance") 也应该有效(作为 ggplot 对象中的单独术语,而不是在 geom_point() 调用中......)
    • @BenBolker scale_colour_manual 有命名参数 value 吗?在我看来是values,最后是's'。
    【解决方案2】:

    您应该 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"))
    

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

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多