2013-04-04 4 views
4

В следующем примере я создаю две серии точек и рисую их с использованием 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 S в двух аспектах, сохраняя Схемой Подчеркивая

> 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 

Как это может быть достигнуто?

ответ

11

Вы должны поместить 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

Смежные вопросы