如何根据R中的p值来缩放图形的点?

Eva*_*van 1 plot r graph dataframe

我有一个名为的data.frame df.ordered,如下所示:

             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
Run Code Online (Sandbox Code Playgroud)

我制作了以下图表 在此输入图像描述

我用过代码:

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()
Run Code Online (Sandbox Code Playgroud)

我现在想要将图形的点缩放到pvals列.我希望低p值是更大的点,而更高的p值是更小的点.一个问题是一些p pvals值为0.我正在考虑将所有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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在,完全由你来定义cex和之间的关系pvals.怎么样a + (1 - pvals) * (b - a)?这将映射1-pvals[0,1][a,b].例如,a = 1, b = 5您可以尝试:

cex <- 1 + (1 - df.ordered$pvals) * (5 - 1)
Run Code Online (Sandbox Code Playgroud)

我希望p值在0.000和0.0010之间,使cex = ~10,p值在0.010和0.20之间,使cex = ~5,p值从0.20-1.00得到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)]
Run Code Online (Sandbox Code Playgroud)