5

私はRを初めて使用するので、質問で不明な点がある場合はご容赦ください。

私はdata.frame5列の「タンパク質」を持っています。

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)で火山プロットをプロットしようとしています。次に、ドットのサイズをfreqにマップし、colorをmRNA_FCにマップします。これはすべて正常に機能し、これが私が使用したコードです:

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))

ここまでは大丈夫です。しかし、実験の性質上、データは非常に密集してい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

しかし、私はまだそれを行う方法を見つけていません。

どんな助けでもいただければ幸いです。乾杯!

4

1 に答える 1

10

このタイプのものには、を使用します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)

ここに画像の説明を入力してください

于 2012-04-13T15:28:29.363 に答える