2016-02-17 3 views
0

Я новичок в R. Моя цель - создать приятный сюжет с использованием регрессионных линий и эллипса уверенности. Мне удалось научить себя, как создавать xy-графики, линии регрессии и круги, используя ggplot2, но теперь я застрял в цветах.R/ggplot2: застрял с определяющими цветами

В моем примере со случайными числами у меня есть 4 группы данных, и я хочу изменить цвета. Мне удалось изменить их с помощью colorbrewer, но мне не нравятся любые их пресеты и я хочу определить свои собственные.

Вот мой код, до сих пор с ColorBrewer:

стол
library(ggplot2) 
data = read.csv("test.csv") 
data$type <- factor(data$type, levels=c("bbb","ccc","aaa","ddd")) 
g = aes(x=alpha, y=beta, color=type, group=type) 
p_test <- ggplot(subset(data, id %in% c("a1", "b1"))) + 
    geom_point(g) + 
    stat_ellipse(g) + 
    geom_smooth(g, method=lm, se=FALSE) + 
    scale_color_brewer(palette="Set3") + 
    expand_limits(x=c(1,11), y=c(1,11)) + 
    xlab(expression(paste(italic(blah[p]), " in q ", r^-1))) + 
    ylab(expression(paste(lambda, " in K ", l^-2*M^-3))) + 
    ggtitle("blahblah") + 
    theme(legend.justification=c(0,1), legend.position=c(0,1), legend.title=element_blank()) 

данные, как это:

> data 

    id alpha beta type 
1 a1 1.2 1.1 aaa 
2 a1 6.6 3.4 bbb 
3 a1 3.7 6.4 ccc 
4 a1 2.7 6.4 aaa 
5 a1 5.3 6.3 bbb 
6 a1 4.5 8.1 ccc 
7 a1 10.5 9.0 bbb 
8 a1 9.9 5.3 aaa 
9 a1 2.8 5.3 bbb 
10 a1 5.4 1.6 ccc 
11 a1 3.4 10.7 aaa 
12 a1 8.0 4.0 bbb 
13 a1 6.1 6.5 ccc 
14 a1 8.8 9.0 bbb 
15 a1 8.1 1.1 aaa 
16 a1 4.2 3.8 bbb 
17 a1 9.1 1.2 ccc 
18 a1 4.4 2.3 aaa 
19 a1 8.8 7.8 bbb 
20 a1 11.0 2.5 ccc 
21 a1 7.0 9.4 bbb 
22 b1 9.5 7.8 ddd 
23 b1 7.6 4.5 ddd 
24 b1 10.8 7.5 ddd 
25 b1 5.6 4.5 ddd 
26 b1 8.9 11.0 ddd 
27 c1 8.1 7.0 fff 
28 c1 7.5 9.3 fff 
29 c1 3.1 6.0 ggg 

Затем я попытался изменить цвет. И вот где мои проблемы начинаются:

1.) Сначала я хотел попробовать градиент радуги. Поэтому я заменил

scale_color_brewer(palette="Set3") + 

с

scale_colour_gradientn(colours=rainbow(4)) + 

Который дал мне ошибку «дискретное значение подается на непрерывную шкалу». Что это значит?

2.) Затем я попытался определения фиксированных цветов с помощью

scale_fill_manual(values=c("red", "blue", "green", "orange")) + 

Возвращаемый сюжет, но не с определенными цветами. Они похожи на значения по умолчанию? Почему?

3.) Наконец, я попытался определить свой собственный градиент. Я хочу, чтобы он варьировался от желтого до красного. Таким образом, я использовал

scale_colour_gradientn(colours=c("yellow", "red")) + 

Который также привел к ошибке: Дискретное значение, подаваемое на непрерывный масштаб.

Тогда я сдался.

Может кто-нибудь, пожалуйста, просветит меня, что я делаю неправильно? Почему работает цветной пивовар, но не все остальное?

+1

Вы хотите # 2, но это должно быть 'scale_colour_manual', а не' scale_fill_manual', как вы пытаетесь установить цвет, а не заливка. Градиенты не работают, потому что вы передаете им категориальные данные ('type'), поэтому для определения градиента нет чисел. – alistaire

+0

Несвязанный: вам нужно всего лишь установить сопоставление ('aes') один раз в' ggplot', а все остальное наследует, если вы не переопределите новое сопоставление. – alistaire

+0

Спасибо alistaire! – Philipp

ответ

0

Alistaire уже ответил на вопрос. Поскольку эстетический color отображается на переменную factor, ggplot ожидает, что цветовая гамма будет дискретной по характеру (например, ваш № 2 выше).

Так попробуйте это:

library(ggplot2) 
data = read.csv("test.csv") 
data$type <- factor(data$type, levels=c("bbb","ccc","aaa","ddd")) 
g = aes(x=alpha, y=beta, color=type, group=type) 
p_test <- ggplot(subset(data, id %in% c("a1", "b1"))) + 
    geom_point(g) + 
    stat_ellipse(g) + 
    geom_smooth(g, method=lm, se=FALSE) + 
    expand_limits(x=c(1,11), y=c(1,11)) + 
    xlab(expression(paste(italic(blah[p]), " in q ", r^-1))) + 
    ylab(expression(paste(lambda, " in K ", l^-2*M^-3))) + 
    ggtitle("blahblah") + 
    theme(legend.justification=c(0,1), legend.position=c(0,1), legend.title=element_blank()) 


# These work fine 
p_test + scale_color_manual(values = rainbow(4)) 
p_test + scale_color_manual(values = c("red", "blue", "green", "orange")) 
p_test + scale_color_manual(values = RColorBrewer::brewer.pal(4, "Set3")) 
p_test + scale_color_discrete(h = c(0,360), c = 100, l = 50) 

# This wont work 
p_test + scale_color_gradient(low = "blue", high = "red") 

Ошибка Error: Discrete value supplied to continuous scale говорит о том, что цветовая гамма непрерывный характер, но переменная дискретный характер (factor).

Надеется, что это помогает ...

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