Я набирал скорость с R в прошлом месяце.
Вот мой вопрос:
Как можно назначить цвета категориальным переменным в ggplot2, которые имеют стабильное отображение? Мне нужны согласованные цвета для набора графиков, которые имеют разные подмножества и разное количество категориальных переменных.
Например,
plot1 <- ggplot(data, aes(xData, yData,color=categoricaldData)) + geom_line()
где categoricalData
имеет 5 уровней.
А потом
plot2 <- ggplot(data.subset, aes(xData.subset, yData.subset,
color=categoricaldData.subset)) + geom_line()
где categoricalData.subset
имеет 3 уровня.
Тем не менее, определенный уровень в обоих наборах будет иметь другой цвет, что затруднит совместное чтение графиков.
Нужно ли создавать вектор цветов во фрейме данных? Или есть другой способ назначить определенные цвета категориям?
factor
, это общий для всех участков.fillScale <- scale_fill_manual(name = "grp",values = myColors)
чтобы использовать это с гистограммами.Я нахожусь в такой же ситуации указывал malcook в своем комментарии : к сожалению, ответ на Тьерри не работает с ggplot2 версии 0.9.3.1.
Вот это первая цифра:
и вторая цифра:
Как мы видим, цвета не остаются неизменными, например, E переключается с пурпурного на синий.
Как предложил malcook в своем комментарии и hadley в своем комментарии, код, который использует
limits
правильно, работает:дает следующий рисунок, который является правильным:
Это вывод из
sessionInfo()
:источник
Самым простым решением является преобразование вашей категориальной переменной в коэффициент до поднабора. Суть в том, что вам нужна факторная переменная с одинаковыми уровнями во всех ваших подмножествах.
С символьной переменной
С переменной фактора
источник
+ scale_colour_discrete(drop=TRUE,limits = levels(dataset$fCategory))
для сохранения цвета | коэффициент ассоциации , но, который работает, за исключением того , в моих руках, на падение = TRUE является НЕ соблюдается (я ожидаю , что это удалить уровень из легенда). Драт ... или это я?Это старый пост, но я искал ответ на этот же вопрос,
Почему бы не попробовать что-то вроде:
Если у вас есть категориальные значения, я не вижу причины, почему это не должно работать.
источник
myColors <- brewer.pal(5,"Set1"); names(myColors) <- levels(dat$grp)
чтобы избежать необходимости вручную кодировать уровни.Основываясь на очень полезном ответе Джорана, я смог придумать это решение для стабильной цветовой шкалы для логического фактора (
TRUE
,FALSE
).Поскольку ColorBrewer не очень полезен для бинарных цветовых шкал, два необходимых цвета определяются вручную.
Вот
myboolean
имя столбца,myDataFrame
содержащего фактор ИСТИНА / ЛОЖЬ.date
иduration
имена столбцов, которые должны быть сопоставлены с осями x и y графика в этом примере.источник