ggplot 2散点图颜色很混乱

时间:2016-07-14 22:06:23

标签: r ggplot2

当你运行这段代码时,你会看到B的刻面有一个红点,但显然应该是红色。如何在给定数据框架的情况下正确设置颜色" d"

谢谢。

d = data.frame(x = c(1,2,3),y = c(4,5,6), color = c("red","blue","red"), group = c("A","B","A"))
d
ggplot(data= d, aes(x = x, y = y ) ) +geom_point( color = d$color)+
facet_wrap(~group)

2 个答案:

答案 0 :(得分:2)

这是一种方式:

ggplot(data= d, aes(x = x, y = y ) ) + 
    geom_point(aes(color = color))+
    facet_wrap(~group) + 
    scale_color_manual(values = c('red' = 'red','blue' = 'blue'))

答案 1 :(得分:2)

base图不同,ggplot并不期望您的数据中包含一列颜色名称。它希望您有一个列,用于定义要着色的变量,并可选择指定该向量的值与自定义颜色之间的映射(如果您不喜欢默认值)。

在您的数据中,color列似乎基于group列。这将是用于创建绘图的规范ggplot方法(请注意,未使用color列):

ggplot(data = d, aes(x = x, y = y, color = group)) +
  geom_point() + 
  facet_wrap(~group)

请注意,您不需要使用相同的列进行构面和着色,例如,

ggplot(data = mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
  geom_point() +
  facet_wrap(~ am)

关键是您要将列映射到coloraes() aes()参数。当涉及构面时ggplot可能会在幕后分割数据。此数据操作基于提供给aes内提供的数据参数和列名称的数据。

如果您指定data$column,则只传递向量。您是从数据框中获取的,但ggplot并不知道 - 它可能来自任何地方。这将导致为方面完成的子集化中的错误。您需要使用aes(color = column)(请注意缺少data$ - 仅使用aes()中的列名称),ggplot将在数据中查找该名称的列并知道如何正确过滤每个方面的数据。