繁体   English   中英

ggplot2 错误:提供给连续刻度的离散值

[英]ggplot2 error : Discrete value supplied to continuous scale

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

我有以下代码,它完美地工作。 它绘制一个散点图,然后用根据“微风格”着色的 splineHull 多边形覆盖它。

脚本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 来更改散点图中点的颜色。

脚本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)

我看到以下错误:

错误:提供给连续刻度的离散值

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

脚本3:

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

那么,脚本 2发生了什么,错误来自哪里,我该如何使它工作?

显然,对于两种不同的几何图形,您不能有不同的颜色美感。 作为一种解决方法,请对点使用填充美学。 这意味着您必须使用具有填充内部的点标记样式(请参阅?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 组的此线程,讨论了类似的问题和一些解决方法。

现在我们知道两个颜色变量是不同的类型,问题就来了。 您可以尝试使用不同的比例(例如填充而不是颜色)

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)

错误:提供给连续刻度的离散值

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

绘图输出

如果您必须使用相同的比例(颜色),并且无法将变量转换为相同类型,请参阅此以获取更多信息: 在 ggplot 中使用 facet 绘制连续和离散系列

只是在上面的首选 eipi10 答案中添加一些内容(谢谢你!!)。 color="NA" 选项为了去掉圆形周围的边框 (pch=21) 必须在 "" 之间。 如果您使用 colour=NA (不带引号),则整个形状将消失且不会绘制。 我只是对答案发表评论,但我仍然没有声誉:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM