Использование двух масштабных градиентов цвета ggplot2
Если есть, я думаю, для этого должно быть очень простое решение. У меня есть два больших блока данных, которые в основном выглядят так:
> data1[1,]
chromosome start end test ref position log2 p.value
13600 Y 10199251 10200750 533 616 10200000 0.2181711 0.00175895
...
> data2[1,]
chromosome start end test ref position log2 p.value
4080 Y 10197501 10202500 403 367 10200000 0.04113596 0.3149926
...
Я использую этот код для построения двух данных в одном графике:
p <- ggplot() + geom_point(data=subset(data1, p.value >= glim[1]),
map=aes(x=position, y=log2, colour=p.value))
+ geom_point(data=subset(data2, p.value >= glim[1]), map=aes(x=position,
y=log2, colour=p.value))
Когда я рисовал одиночные кадры данных, я использовал красно-белый градиент цвета для значений в столбце "p.value". Используя эту строку:
p <- p + scale_colour_gradient(limits=glim, trans='log10', low="red",
high="white")
Центральная проблема: теперь с двумя кадрами данных, как я могу установить один градиент цвета для data1 и другой для data2? В предыдущем сообщении я читал, что невозможно использовать две разные цветовые шкалы (ej. "Low =" для первого и "high =" для второго), но в этом случае это точно такая же цветовая шкала (Если я не смешиваю терминологию). Синтаксис явно неверен, но я хотел бы сделать что-то вроде этого:
p <- p + scale_colour_gradient(limits=glim, trans='log10', low="red",
high="white")
p <- p + scale_colour_gradient(limits=glim, trans='log10', low="blue",
high="white")
Ответы
Ответ 1
Во-первых, обратите внимание, что причина ggplot не поощряет это, потому что графики, как правило, трудно интерпретировать.
Вы можете получить две цветовые градиентные шкалы, прибегая к немногому обману. В geom_point некоторые формы (от 21 до 25) могут иметь как заливку, так и цвет. Вы можете использовать это, чтобы создать один слой со шкалой "fill", а другой - с "цветным" масштабом.
# dummy up data
dat1<-data.frame(log2=rnorm(50), p.value= runif(50))
dat2<-data.frame(log2=rnorm(50), p.value= runif(50))
# geom_point with two scales
p <- ggplot()
p <- p + geom_point(data=dat1, aes(x=p.value, y=log2, color=p.value), shape=21, size=3)
p <- p + scale_color_gradient(low="red", high="gray50")
p <- p + geom_point(data= dat2, aes(x=p.value, y=log2, shape=shp, fill=p.value), shape=21, size=2)
p <- p + scale_fill_gradient(low="gray90", high="blue")
![enter image description here]()