Использование нескольких шкал scale_colour_gradient для разных диапазонов данных на одном графике

Я очень плохо знаком с R, поэтому, пожалуйста, потерпите меня, если что-то не понятно в моем вопросе.

у меня естьdata.frame & Quot; белок & Quot; с 5 столбцами, а именно;

1.protein_name, 2.protein_FC, 3.protein_pval, 4.mRNA_FC, 5.mRNA_pval и 6.freq.

Я пытаюсь построить график вулкана с x = log2 (protein_FC), y = -log10 (protein_pval). Затем сопоставьте размер точек частоте и цвету mRNA_FC. Это все работает нормально, и вот код, который я использовал:

<code>ggplot( protein [ which ( protein$freq <= 0.05 ),] , aes( x = log2( protein_FC ) ,
       y = -log10 ( protein_pval ) , size = freq , colour = mRNA_FC , 
       label = paste(protein_name,",",mRNA_pval), alpha=1/1000)) + 
  geom_point() + geom_text( hjust = 0 , vjust = 0 , colour = "black" , size = 2.5 ) + 
  geom_abline( intercept = 1.3 , slope = 0) + 
  scale_colour_gradient(limits=c(-3,3))
</code>

пока все хорошо Но из-за характера эксперимента, данные довольно плотны вокругmRNA_FC = 0, Там стандартная цветовая схема, которую применяет ggplot, не очень хорошо различает разные точки.

Я пробовал различные цветовые гаммы с помощьюlow="colour1" а такжеhigh="colour2", Однако я думаю, что будет лучше использовать несколько цветовых шкал в диапазонахmRNA_FCто есть что-то вроде синий на белый для-3<mRNA<-0.2от красного к белому для-0.2<mRNA_FC<0от зеленого до белого для0<mRNA_FC<0.2 и черный на белый для0.2<mRNA_FC<3.

Но я пока не нашел способа сделать это.

Любая помощь будет оценена. Ура!

 smu13 апр. 2012 г., 16:43
Тогда как насчет дискретной цветовой шкалы с определяемой пользователемbreaks?
 ktyagi13 апр. 2012 г., 16:14
Цветовая шкала по умолчанию округляет данные вокруг mRNA_FC = 0, но я хочу, чтобы он показывал совершенно разные цвета с двух сторон от 0. Я чувствую, что он показывает точки, очень близкие к 0, скажем -0,1, 0 и 0,1 с тем же цвет. Извините, я не могу поделиться этим набором данных, потому что он скоро будет опубликован, а владелец данных пока не хочет публиковать его.
 smu13 апр. 2012 г., 16:04
Я не до конца понимаю ваш вопрос. Пример рисунка или набора данных был бы неплох, чтобы лучше понять, что не так с цветовыми шкалами ggplot2 по умолчанию.

Ответы на вопрос(1)

Решение Вопроса

scale_gradientn, Например:

library(ggplot2)

x = seq(-0.1, 0.1, len=100)
y = 0:10
dat = expand.grid(x=x, y=y)

ggplot(data=dat, aes(x=x, y=y, fill=x)) +
  geom_raster() +
  scale_fill_gradientn(colours=c('red', 'yellow', 'cyan', 'blue'),
    values   = c(-0.05,-1e-32,1e-32,0.05),
    breaks   = c(-0.05,-0.005,0.005,0.05),
    rescaler = function(x,...) x,
    oob      = identity)

enter image description here

 ktyagi17 апр. 2012 г., 11:37
Спасибо, Джон. Это именно то, что я хотел. Честно говоря, мне потребовалось некоторое время, чтобы выяснить, как лучше всего его использовать, как я сказал в посте, мой опыт работы с R составляет 2 недели.

Ваш ответ на вопрос