当你运行这段代码时,你会看到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)
答案 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)
关键是您要将列映射到color
中aes()
的aes()
参数。当涉及构面时ggplot
可能会在幕后分割数据。此数据操作基于提供给aes
内提供的数据参数和列名称的数据。
如果您指定data$column
,则只传递向量。您是从数据框中获取的,但ggplot
并不知道 - 它可能来自任何地方。这将导致为方面完成的子集化中的错误。您需要使用aes(color = column)
(请注意缺少data$
- 仅使用aes()
中的列名称),ggplot
将在数据中查找该名称的列并知道如何正确过滤每个方面的数据。