首页 文章

ggplot2错误:提供给连续比例的离散值

提问于
浏览
13

我有一个名为“merged”的数据集,其中包含3个数字列“pauseMedian”和“numTotalPauses”和“diff” . 我还有一个splineHull数据集,它还包含数字列“pauseMedian”和“numTotalPauses”,以及一个6级因子“microstyle”

我有以下代码,它完美地运行 . 它绘制一个散点图,然后用splineHull多边形覆盖它,根据“microstyle”颜色 .

script 1:

ggplot(data=merged,aes(x = pauseMedian, y = numTotalPauses)) 
       + geom_point()  
       + geom_polygon(data = splineHull, 
                      mapping=aes(x=pauseMedian, 
                                  y=numTotalPauses, 
                                  group=microstyle, 
                                  color = microstyle),
                       alpha=0)

然后,我还想通过添加一个属性color = diff来更改散点图中点的颜色 .

script 2:

ggplot(data=merged,aes(x = pauseMedian, y = numTotalPauses, color = diff)) 
       + geom_point()  
       + geom_polygon(data = splineHull, 
                      mapping=aes(x=pauseMedian, 
                                  y=numTotalPauses, 
                                  group=microstyle, 
                                  color = microstyle),
                       alpha=0)

我看到以下错误:

Error: Discrete value supplied to continuous scale

我不知道为什么我会看到这个错误 . 如果我仍然想要彩色散点图但没有多边形,我运行以下代码再次工作 .

script 3:

ggplot(data=merged,aes(x = pauseMedian, y = numTotalPauses, color = diff)) 
       + geom_point()

那么, script 2 发生了什么,错误来自何处,以及如何使其工作?

3 回答

  • 4

    显然,对于两种不同的宝石,你不可能有不同的颜色美学 . 作为解决方法,请使用填充美学来代替点 . 这意味着您必须使用具有填充内部的点标记样式(请参阅 ?pch 并向下滚动以查看可用的点样式) . 这是一种方法:

    ggplot() + 
      geom_point(data=merged,aes(x = pauseMedian, y = numTotalPauses, fill = diff),
                 pch=21, size=5, colour=NA) +
      geom_polygon(data = splineHull, 
                   mapping=aes(x=pauseMedian, 
                               y=numTotalPauses, 
                               colour = microstyle),
                   alpha=0)
    

    添加 colour=NA (在 aes() 之外),摆脱点标记周围的默认黑色边框 . 如果您想在点周围使用彩色边框,只需将 colour=NA 更改为您喜欢的颜色即可 .

    另请参阅 ggplot2 Google小组的this thread,讨论类似的问题和一些解决方法 .

  • 1

    既然我们知道两种颜色变量是不同类型的,那就是问题所在 . 你可以尝试使用不同的比例(例如填充而不是颜色)

    set.seed(123)
    my_df1 <- data.frame(a=rnorm(100), b=runif(100), c=rep(1:10, 10))
    my_df2 <- data.frame(a=rnorm(100), b=runif(100), c=factor(rep(LETTERS[1:5], 20)))
    
    # this won't work. can't assign discrete and continuous to same scale
    ggplot() +
      geom_point(data=my_df1, aes(x=a, y=b, color=c)) +
      geom_polygon(data=my_df2, aes(x=a, y=b, color=c), alpha=0.5)
    

    Error: Discrete value supplied to continuous scale

    # but use fill for polygons, and that works:
    ggplot() +
      geom_point(data=my_df1, aes(x=a, y=b, color=c)) +
      geom_polygon(data=my_df2, aes(x=a, y=b, fill=c), alpha=0.5)
    

    plot output

    如果必须使用相同的比例(颜色),并且无法将变量转换为相同的类型,请参阅此信息以获取更多信息:Plotting continuous and discrete series in ggplot with facet

  • 16

    只是为了上面的首选eipi10答案添加一些东西(谢谢你!!) . 为了摆脱圆形周围的边界(pch = 21),color =“NA”选项必须在“”之间 . 如果使用color = NA(不带引号),整个形状将消失并且不会绘制 . 我会对答案做出评论,但我仍然没有声名鹊起:)

相关问题