首页 > 解决方案 > ggplot2中的点颜色和构面

问题描述

Hadley Wickham 的“ggplot2:用于数据分析的优雅图形”一书在第 7 章中有这个示例图,其中 z 的所有三种颜色的平均点出现在每个方面:

在此处输入图像描述

这是本书提供的用于制作图表的代码:

df <- data.frame(
    x = rnorm(120, c(0, 2, 4)),
    y = rnorm(120, c(1, 2, 1)),
    z = letters[1:3]
)


df_sum <- df %>%
    group_by(z) %>%
    summarise(x = mean(x), y = mean(y)) %>%
    rename(z2 = z)

ggplot(df, aes(x, y)) +
    geom_point() +
    geom_point(data = df_sum, aes(colour = z2), size = 4) +
    facet_wrap(~z)

理想情况下,将颜色名称保留为 z 而不是将其重命名为 z2 应该会产生相同的结果:

df_sum <- df %>%
     group_by(z) %>%
     summarise(x = mean(x), y = mean(y))

df_sum <- df %>%
     group_by(z) %>%
     summarise(x = mean(x), y = mean(y))

ggplot(df, aes(x, y)) +
     geom_point() +
     geom_point(data = df_sum, aes(colour = z), size = 4) +
     facet_wrap(~z)

但是这样做会使得每个面只出现一个彩色点:

在此处输入图像描述

是否有一个原因?

标签: rggplot2

解决方案


不,它不应该产生相同的结果。当您使用facet_wrapby variablez时,您拆分每个方面面板的数据,仅绘制属于 a、b 或 c 的内容(您的“不正确”图表)。通过重命名zz2您可以保留黑点的facet_wrapby ,但仍会在每个面板中绘制每个彩色点(因为没有可以使用的变量)。zdf_sumzfacet_wrap


推荐阅读