如何正确突出显示使用构面的ggplot2图中的点

时间:2013-04-04 06:57:59

标签: r plot ggplot2

在下面的示例中,我创建了两个点系列并使用ggplot2绘制它们。我还根据它们的值突出了几点

library(ggplot2)
x <- seq(0, 6, .5)
y.a <- .1 * x -.1
y.b <- sin(x)
df <- data.frame(x=x, y=y.a, case='a')
df <- rbind(df, data.frame(x=x, y=y.b, case='b'))
print(ggplot(df) + geom_point(aes(x, y), color=ifelse(df$y<0, 'red', 'black')))

这是结果

First result

现在我想将两个case分成两个方面,保持突出显示方案

> print(ggplot(df) + geom_point(aes(x, y), color=ifelse(df$y<0, 'red', 'black')) + facet_grid(case ~. ,))
Error: Incompatible lengths for set aesthetics: colour

如何实现这一目标?

2 个答案:

答案 0 :(得分:15)

您应该将color=ifelse(y<0, 'red', 'black')放在aes()内,因此将根据每个方面中的y值单独设置颜色。如果将颜色设置在aes()之外作为矢量,则在两个面中使用相同的矢量(具有相同的长度),然后由于颜色矢量的长度作为数据点的数量而变大,因此会出现错误。

然后你应该添加scale_color_identity()以确保直接解释颜色名称。

ggplot(df) + geom_point(aes(x, y, color=ifelse(y<0, 'red', 'black'))) + 
   facet_grid(case ~. ,)+scale_color_identity()

enter image description here

答案 1 :(得分:0)

除了使用scale _..._ identity,还可以在I()中包装颜色(并填充)美观。它还需要在aes中定义颜色。

我遇到了一个问题,我猜想OP是偶然使用I() ... ggplot color is not automatically coloring based on group

不确定我会不会每个人都利用它,但是我发现这种乐趣。

library(ggplot2)
x <- seq(0, 6, .5)
y.a <- .1 * x -.1
y.b <- sin(x)
df <- data.frame(x=x, y=y.a, case='a')
df <- rbind(df, data.frame(x=x, y=y.b, case='b'))

ggplot(df) + 
  geom_point(aes(x, y, color= I(ifelse(y < 0, 'red', 'black')))) +
  facet_grid(case ~. )

reprex package(v0.3.0)于2020-07-01创建