【问题标题】:Defining Colors in a grouped/faceted scatterplot in R using ggplot2使用 ggplot2 在 R 中的分组/分面散点图中定义颜色
【发布时间】:2015-04-14 16:40:52
【问题描述】:

我对 R 的世界很陌生,所以请耐心等待我 ;-)

在过去的两周里,我一直在玩我的一个旧数据集,试图找出 R 中的一些东西。 你需要了解我的数据来帮助我,我得到了关于不同人的年龄、教育程度、性别和旅行花费的数据。 所以我想用这些数据生成两种图: 首先,我想创建一个散点图,x 轴为年龄,y 轴为花费的金钱。然后我想用颜色编码代表学校类型/他们的教育的点。

这有点适用于这段代码:

scatter <- ggplot(spending.analysis, aes(age, money), na.action=na.exclude)
scatter + 
        geom_point(aes(color = school), alpha = 0.7) +
        geom_smooth(method = "lm", color = "dark blue", alpha = 0.1, fill = "blue")

但不幸的是,它使用了我不太喜欢的 R 的默认颜色,所以我想告诉 R 在学校类型 a 上使用颜色 A,在学校类型 b 上使用颜色 B 等。 到目前为止,我无法做到这一点。

实现这一目标的下一个方法是这种方式,但同样失败了......

scatter.ns <- subset(spending.analysis, school == "noch in Schulausbildung")
scatter.oa <- subset(spending.analysis, school == "ohne Abschluss")
scatter.hs <- subset(spending.analysis, school == "Hauptschule")
scatter.rs <- subset(spending.analysis, school == "Realschule")
scatter.gym <- subset(spending.analysis, school == "Gymnasium")


scatter2 <- ggplot(scatter.hs, scatter.rs, scatter.gym) +
            geom_point(aes())

我的第二个想法 - 这不是关于真正的分析,它只是在玩耍,试图学习和理解 R - 是对情节进行刻面,这样我就可以将每种学校类型单独放在散点图中。

scatter <- ggplot(spending.analysis, aes(age, money), na.action=na.exclude)
scatter + 
    geom_point(aes(color = school), alpha = 0.7) +
        geom_smooth(method = "lm", color = "dark blue", alpha = 0.1, fill = "blue") +
        facet_grid(. ~ school)

再一次,这段代码有点用,但我仍然不知道如何为每个地块/学校类型分配我喜欢的颜色。由于某些奇怪的原因,NA 也有一个散点图,这让我很困惑。 有没有办法排除数据被绘制?!基本上我认为踢出第一个和最后一个情节是有道理的。 (见http://de.tinypic.com/r/2hhkp5l/8

抱歉,这篇文章很长,但作为初学者真的很难,我真的很想自己弄清楚。

非常感谢您的建议 - 请让初学者理解它;-)

【问题讨论】:

标签: r plot ggplot2 scatter-plot facet


【解决方案1】:

您可以通过多种方式实现目标。首先,如果您考虑生成单独的散点图然后合并它们,您可以使用multiplot function。您只需使用所有设置生成所需的图表,然后将它们合并。

作为第二种方法,您可以在GGallyggpairs 上生成不同的散点图矩阵(如果这是您所追求的)。

第三,您可以在散点图定义中添加groupColors=c('aquamarine3','chartreuse1','goldenrod1')

最后,您可以确定使用ggplot themes 之一,您可以在其中定义整个调色板和其他小工具。关于你关于NAs的问题的第二部分,如果你能分享一些数据会更好,但原则上你应该能够尝试一些东西:

ggplot(na.omit(your.data.frame[, c("variable1", "variable2")]), aes(x=variable1,y=variable1))

然后继续定义散点图。

【讨论】:

  • 哇,这是一个非常深刻的答案!非常感谢您花时间更详细地解释它,即使是初学者也能理解的水平!伟大的!我将对 multiplot-function 进行一些研究,因为这听起来很有希望,就像 groupColors 一样(我以前从未听说过它们!)!主题听起来也不错,但在这个级别上,这对我来说可能有点太多了。不过还是谢谢你的提示!我以为我在原始帖子的最后一个代码块的第一行中关注了 NA。我什么时候使用省略,什么时候使用排除?再次非常感谢!!!
  • 对不起?什么意思?
【解决方案2】:

当我被要求让我的问题/帮助更容易理解时,这里是目前有效的代码。由于某种未知的原因,它也在绘制 NA。但由于我仍在学习,而不是使用这些数据进行“真正的项目”,这没关系,只是一个小问题。

这是我的代码:

group.colors <- c("noch in Schulausbildung" = "#D11141" , "ohne Abschluss"  = "#00B159", "Hauptschule" = "#00AEDB", "Realschule" = "#F37735", "Gymnasium" = "#FFC425")
scatter <- ggplot(na.action=na.exclude, spending.analysis, aes(age, money))
scatter + 
        geom_point(aes(color = school), alpha = 0.7) +
        geom_smooth( method = "lm", color = "dark blue", alpha = 0.05, fill = "blue", na.action = na.exclude) +
        facet_grid(. ~ school) +
        theme_bw() +
        scale_color_manual(values = group.colors)

我希望这可以帮助其他人解决他们的问题:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2019-06-03
    • 2021-11-13
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多