r - 控制ggplot2中点的顺序?

标签 r ggplot2 rpy2

我正在 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()

enter image description here

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/

相关文章:

r - r ggplot2 : varying font sizes in legend

r - 在 R 和 ggplot2 中绘制正态分布的垂直密度

ubuntu - 在 Ubuntu 上安装 rpy2

r - 如何修改加入函数的代码?

r - R 中 nextafter 功能的实现

r - 如何在facet_grid中将右侧条切换到左侧

c# - 有没有人将 rpy2 与 py2exe 一起使用?

python - Pandas convert_to_r_dataframe 函数 KeyError

r - 如何在 markdown/pandoc 中移动引用书目

r - 如何在 R 中导入和绘制三角形网格?