我正在 ggplot2 中绘制密集散点图,其中每个点可能用不同的颜色标记:
df <- data.frame(x=rnorm(500))
df$y = rnorm(500)*0.1 + df$x
df$label <- c("a")
df$label[50] <- "point"
df$size <- 2
ggplot(df) + geom_point(aes(x=x, y=y, color=label, size=size))
当我这样做时,标有“点”(绿色)的散点绘制在标有“a”标签的红点之上。什么控制着 ggplot 中的 z 顺序,即什么控制哪个点位于哪个点之上?
例如,如果我希望所有“a”点位于所有标记为“point”的点之上(意味着它们有时会部分或完全隐藏该点)怎么办?这是否取决于标签的字母数字顺序?
我想找到一个可以轻松转换为 rpy2 的解决方案。
最佳答案
2016 年更新:
订单美学has been deprecated ,所以此时最简单的方法是对 data.frame 进行排序,使绿点位于底部,并最后绘制。如果您不想更改原始 data.frame,可以在 ggplot 调用期间对其进行排序 - 这是一个使用 dplyr 中的 %>%
和 arrange
的示例包进行即时排序:
library(dplyr)
ggplot(df %>%
arrange(label),
aes(x = x, y = y, color = label, size = size)) +
geom_point()
ggplot2 版本 < 2.0.0 的 2015 年原始答案
在ggplot2中,您可以使用order aesthetic指定绘制点的顺序。最后绘制的将出现在顶部。要应用此功能,您可以创建一个变量来保存您希望绘制点的顺序。
通过将绿点绘制在其他点之后将其置于顶部:
df$order <- ifelse(df$label=="a", 1, 2)
ggplot(df) + geom_point(aes(x=x, y=y, color=label, size=size, order=order))
或者先绘制绿点并将其掩埋,以相反的顺序绘制点:
ggplot(df) + geom_point(aes(x=x, y=y, color=label, size=size, order=-order))
对于这个简单的示例,您可以跳过创建新的排序变量,而只需将 label
变量强制为一个因子,然后是一个数字:
ggplot(df) +
geom_point(aes(x=x, y=y, color=label, size=size, order=as.numeric(factor(df$label))))
关于r - 控制ggplot2中点的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15706281/