2016-07-20 49 views
1

我有一個名爲df.ordered data.frame,看起來像:如何基於R中的p值縮放圖的點?

   labels  gvs order color pvals 
1   Adygei -2.3321916  1  1 0.914 
2   Basque -0.8519079  2  1 0.218 
3   French -0.9298674  3  1 0.000 
4   Italian -2.8859587  4  1 0.024 
5   Orcadian -1.4996229  5  1 0.148 
6   Russian -1.5597359  6  1 0.626 
7   Sardinian -1.4494841  7  1 0.516 
8   Tuscan -2.4279528  8  1 0.420 
9   Bedouin -3.1717421  9  2 0.914 
10   Druze -0.5058627 10  2 0.220 
11   Mozabite -2.6491331 11  2 0.200 
12  Palestinian -0.7819299 12  2 0.552 
13   Balochi -1.4095947 13  3 0.158 
14   Brahui -1.2534511 14  3 0.162 
15   Burusho 1.7958170 15  3 0.414 
16   Hazara 2.2810477 16  3 0.152 
17   Kalash -0.9258497 17  3 0.974 
18   Makrani -0.9007551 18  3 0.226 
19   Pathan 2.5543214 19  3 0.112 
20   Sindhi 2.6614486 20  3 0.338 
21   Uygur -1.2207974 21  3 0.652 
22  Cambodian 2.3706977 22  4 0.118 
23    Dai -0.9441980 23  4 0.686 
24    Daur -1.0325107 24  4 0.932 
25    Han -0.7381369 25  4 0.794 
26   Hezhen -2.7590587 26  4 0.182 
27   Japanese -0.5644325 27  4 0.366 
28    Lahu -0.8449225 28  4 0.560 
29    Miao -0.7237586 29  4 0.194 
30   Mongola -0.9452944 30  4 0.768 
31    Naxi -0.1625003 31  4 0.554 
32   Oroqen -1.2035258 32  4 0.782 
33    She -2.7758460 33  4 0.912 
34    Tu -0.7703779 34  4 0.254 
35   Tujia -1.0265275 35  4 0.912 
36    Xibo -1.1163019 36  4 0.292 
37   Yakut -3.2102686 37  4 0.030 
38    Yi -0.9614190 38  4 0.838 
39  Colombian -1.9659984 39  5 0.166 
40  Karitiana -0.9195156 40  5 0.660 
41    Maya 2.1239768 41  5 0.818 
42    Pima -3.0895998 42  5 0.818 
43   Surui -0.9377928 43  5 0.536 
44  Melanesian -1.6961014 44  6 0.414 
45   Papuan -0.7037952 45  6 0.386 
46  BantuKenya -1.9311354 46  7 0.484 
47 BantuSouthAfrica -1.8515908 47  7 0.016 
48  BiakaPygmy -1.7657017 48  7 0.538 
49   Mandenka -0.5423822 49  7 0.076 
50  MbutiPygmy -1.6244801 50  7 0.054 
51    San -0.9049735 51  7 0.478 
52   Yoruba 2.0949378 52  7 0.904 

我做了下面的圖 enter image description here

我使用的代碼:

jpeg("test3.jpg", 700,700) 
df.ordered$color <- as.factor(df.ordered$color) 
levels(df.ordered$color) <- c("blue","yellow3","red","pink","purple","green","orange") 
plot(df.ordered$gvs, pch = 19, cex=2, col = as.character(df.ordered$color), xaxt="n") 
axis(1, at=1:52, col=as.character(df.ordered$color),labels=df.ordered$labels, las=2) 
dev.off() 

我現在要縮放圖表的點到pvals列。我希望低pvalues是更大的點,更高的p值是更小的點。一個問題是某些pvalues是0.我正在考慮將所有pvals的值設置爲0.000到0.001來解決此問題。有誰知道如何做到這一點?我想讓圖形看起來類似於圖5中的圖形:http://journals.plos.org/plosgenetics/article?id=10.1371/journal.pgen.1004412

回答

5

cex參數是向量化的,也就是說,您可以傳入一個向量(與您的數據長度相同的向量)。以此爲一個簡單的例子:現在

plot(1:5, cex = 1:5) 

enter image description here

,它是完全由你來定義cexpvals之間的關係。 a + (1 - pvals) * (b - a)怎麼樣?這將將1-pvals[0,1]映射到[a,b]。例如,對於a = 1, b = 5,你可以嘗試:

cex <- 1 + (1 - df.ordered$pvals) * (5 - 1) 

我期待有0.000和0.0010之間的p值有CEX =〜10,p值0.010和0.20之間有CEX =〜5,並且從0.20-1.00的p值具有cex =〜0.5。

我建議使用cut()

fac <- cut(df.ordered$pvals, breaks = c(0, 0.001, 0.2, 1), 
      labels = c(10, 5, 0.5), right = FALSE) 
cex <- c(10, 5, 0.5)[as.integer(fac)] 
+0

我很困惑'set.seed(); pvals < - rebta(10,3,5)'dos?此外,因爲我想最低的pvalue是最大的只是設置'size.frame =(1-round(pvals,1)',然後'cex = size.fame'? – Evan

+0

我有一個很難得到我在圖5中看到的大小分離http://journals.plos.org/plosgenetics/article?id=10.1371/journal.pgen.1004412。你有什麼建議嗎? – Evan

+0

這個問題在這個問題中沒有被問到但是,你有沒有想過如何讓標籤對應他們的點的顏色?下面是圖表現在的樣子:http://imgur.com/a/jmBaE – Evan

4

添加到@宋哲元立的答案,這裏是一個爲p值放點的大小「等於」 0大小爲2正常化,並用p值「等於」 1觀測的點大小與尺寸爲零:

plot(df.ordered$gvs, pch = 19, 
    cex=2 * (1-df.ordered$pvals)/(df.ordered$pvals +1), 
    col = as.character(df.ordered$color), xaxt="n") 

enter image description here

+1

@Imo,這是一個很好的答案!我期望在0.000和0.0010之間的pvalues具有Cex =〜10,在0.010和0.20之間的pvalues具有cex =〜5,並且從0.20-1.00具有的pvalues具有cex =〜0.5。有什麼可以想到的嗎? – Evan

+1

@Evan你可以用'ifelse'爲這樣的映射編寫一個函數,像'myFun < - function(x){ifelse(x <.001,10,ifelse(x <.2,5,.5)) ''應該工作。 – lmo