Прежде всего, вы можете сделать минимальный воспроизводимый пример, поделившись некоторыми данными - даже фиктивным набором данных. Несмотря на это, вот пример, который, надеюсь, покажет вам два подхода, которые могут работать. Один более рекомендуется, чем другой (поскольку он использует некоторые принципы Tidy Data), но оба получают одинаковый результат.
Набор данных для обоих:
df <- data.frame(x=1:100, y=rnorm(100))
# basic point plot:
ggplot(df, aes(x,y)) + geom_point()
Допустим, наша цель состоит в том, чтобы построить тот же график, но закрасить точки так, чтобы отрицательные значения y были голубыми, а положительные значения y были красными. Как мы это делаем?
Поточная оценка данных
Вы можете оценить тот же тип, который вы предлагаете, с помощью своего кода. Это работает, но немного сложнее получить тот же результат и немного неуклюже. Это работает, хотя с использованием любого выражения в строке (если вы используете этот подход, я бы рекомендовал использовать aes(color= eval(...))
), но это означает, что у вас больше работы с бэкэндом, используя scale_color_manual
. Немного лучше использовать ifelse()
, что позволит вам установить метки значений прямо в функции aes()
:
ggplot(df, aes(x,y)) +
geom_point(aes(color=ifelse(y<0,'Small Stuff', 'Big Stuff'))) +
scale_color_manual("Type of Stuff", values=list('Big Stuff'='red','Small Stuff'='blue'))
Обратите внимание, что функция scale_color_manual
используется для установки названия легенды. Так как я знаю имена своих этикеток в результате использования ifelse()
, я знаю, что я тоже могу правильно настроить свои цвета.
Метод аккуратных данных
Лучший подход основан на использовании dplyr
, tidyr
и вообще то, что называется Принципы аккуратности данных . Этот подход предполагает, что вы добавляете столбец в свой набор данных для последующего построения графика. Это намного «безопаснее», так что вы не смешиваете подготовку данных с построением графиков, и тогда будет намного проще строить графики позже. Здесь мы сначала настраиваем набор данных:
df$stuff <- ifelse(df$y < 0, 'Small Stuff', 'Big Stuff')
И затем функция построения графика выглядит следующим образом:
ggplot(df, aes(x,y)) +
geom_point(aes(color=stuff)) +
scale_color_manual("Type of Stuff", values=list('Big Stuff'='red', 'Small Stuff'='blue'))
В этом случае оба подхода имеют примерно одинаковое количество кода. В более сложных примерах подход Tidy, как правило, лучше, но здесь go с любым из маршрутов.
Применительно к вашей системе? ... Трудно сказать без совместного использования набора данных или графика. Это просто название легенды? Вы можете установить это в вашей функции scale_color_...
или с помощью labs(color=...
.