2013-08-28 2 views
6

У меня есть кадр данных, как этотggplot набор scale_color_gradientn вручную

BP  R2  LOG10 
96162057 0.2118000 2.66514431 
96162096 0.0124700 0.31749391 
96162281 0.0008941 0.07012148 
96163560 0.5011000 2.48505399 
96163638 0.8702000 3.37778598 

, и я хочу, чтобы построить BP против log10, и цвет точек на R2. R2 - непрерывные значения от 0-1.

myplot <- read.cvs("mytable.csv",head=TRUE) 
attach(myplot) 
ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() 

Пока что так хорошо. Однако я хотел бы отображать цвета R2 в выбранных вручную интервалах и цветах, например (если бы у меня были дискретные значения).

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() + 
     scale_color_manual(breaks= c("1","0.8","0.6","0.4","0.2","0"), 
       values = c("red","yellow","green","lightblue","darkblue")) 
Error: Continuous value supplied to discrete scale 

Это выглядит красиво, но я бы предпочел установить цвета сам.

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point(shape=1) + 
       scale_colour_gradientn(colours = rainbow(10)) 

Итак, как я могу вручную выбрать интервалы из непрерывных значений (1-0.8, 0.8-0.6, 0,6-0,4, 0.4-0.2, 0.2-0), и цвет их по своему вкусу (красный, желтый , зеленый, светлый, темно-синий)? Гладкий градиент между цветами был бы крутым, но не решающим.

ответ

7

Вы можете использовать scale_colour_gradientn(), а затем предоставить свои собственные colours= и values=. Значения будут давать интервалы для каждого цвета.

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() + 
    scale_colour_gradientn(colours = c("red","yellow","green","lightblue","darkblue"), 
         values=c(1.0,0.8,0.6,0.4,0.2,0)) 

enter image description here

+0

Большое спасибо Didzis, что полностью решает! У вас также есть решение без градиентов, поэтому все значения от 1-0.8 = красный, 0.8-0.6 = желтый и т. Д.? – user2724998

+0

Затем вы должны разделить свои данные интервалами с помощью функции cut() и использовать эти интервалы как дискретные значения. –

+0

Хорошо, еще раз спасибо! – user2724998

3

Через 4 года комментарий к этому сообщению: Важно отметить, что «ценность» сопоставить значения переменных между 0 и 1, 0 являющимися самым низкой и 1 наибольшим значением. В этом примере он по совпадению подходит к значениям переменной, которые равны от 0 до 1. (Надеюсь, что я не понимаю глупостей, но, по крайней мере, в моем небольшом опыте это так)

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