Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在ggplot2中创建具有多个方框图的地物_R_Ggplot2 - Fatal编程技术网

R 在ggplot2中创建具有多个方框图的地物

R 在ggplot2中创建具有多个方框图的地物,r,ggplot2,R,Ggplot2,我在尝试使用ggplot在一个图形中绘制多个箱线图时遇到了一些问题,尽管我可以在vanilla R中轻松做到这一点。我尝试在谷歌上搜索了好几个小时的答案,但我找不到任何人有和我一样的问题 基本上,我有一个25列的数据框 [1] "gene" "NumberIntrons" [3] "NumResidues" "protein_coding&quo

我在尝试使用ggplot在一个图形中绘制多个箱线图时遇到了一些问题,尽管我可以在vanilla R中轻松做到这一点。我尝试在谷歌上搜索了好几个小时的答案,但我找不到任何人有和我一样的问题

基本上,我有一个25列的数据框

[1] "gene"                    "NumberIntrons"          
[3] "NumResidues"             "protein_coding"         
[5] "ncRNA"                   "Rel_telomere"           
[7] "mRNA_copies_per_cell"    "protein_copies_per_cell"
[9] "mRNA.stabilities"        "GeneticDiversity"       
[11] "ProteinHalfLife"         "Golgi"                  
[13] "Mitochondrion"           "Nuclear_dots"           
[15] "Nuclear_envelope"        "Nucleolus"              
[17] "Nucleus"                 "Vacuole"                
[19] "start"                   "end"                    
[21] "solid.media.KO.fitness"  "gene.expression.RPKM"   
[23] "conservation.phyloP"     "chromosome"             
[25] "essential"  
“高尔基体”、“核仁”、“核膜”、“线粒体”、“核点”、“细胞核”和“液泡”中的值为1或0,取决于该基因表达的蛋白质是否存在于该隔室中。
所以现在我的问题是我想比较不同区域中蛋白质的表达率。我通过使用
subset()
函数为每个隔间创建不同的数据框来解决这个问题,以便将特定隔间中表达的所有基因放置在它们特定的数据框中。为了使用basic R创建图形,我可以简单地运行以下命令:

boxplot(log10(golgi.df$gene.expression.RPKM),
        log10(mito.df$gene.expression.RPKM),
        log10(nucleus.df$gene.expression.RPKM),
        log10(nuc_env.df$gene.expression.RPKM),
        ...
这让我可以比较在每个隔间中发现的蛋白质的基因表达率。问题是,我根本不知道如何在ggplot中运行相同的命令,我不确定我是否只是遗漏了一些非常明显的东西,因为我自己无法理解,我只是找不到任何和我有类似问题的人

非常感谢你的帮助

编辑: 数据样本:

          gene NumberIntrons NumResidues protein_coding ncRNA Rel_telomere
1  SPAC1002.01             1         179              1     0    0.4768186
2  SPAC1002.02             0         229              1     0    0.4770079
3 SPAC1002.03c             0         923              1     0    0.4772343
4 SPAC1002.04c             0         199              1     0    0.4782177
5 SPAC1002.05c             0         715              1     0    0.4784627
  mRNA_copies_per_cell protein_copies_per_cell mRNA.stabilities
1                 0.46                      NA         38.30908
2                 3.80                 2564.51         32.34325
3                 7.20                 9719.87         47.75722
4                 1.40                 1600.25         26.73106
5                 0.52                      NA         20.38781
  GeneticDiversity ProteinHalfLife Golgi Mitochondrion Nuclear_dots
1        0.0024331              NA     0             1            0
2        0.0025389           177.6     0             0            0
3        0.0041078           959.8     0             0            0
4        0.0043796           756.3     0             0            0
5        0.0043057              NA     0             0            0
  Nuclear_envelope Nucleolus Nucleus Vacuole   start     end
1                0         0       0       0 1798347 1799015
2                0         0       0       0 1799061 1800053
3                0         0       0       0 1799915 1803141
4                0         0       0       0 1803624 1804491
5                0         0       1       0 1804548 1806797
  solid.media.KO.fitness gene.expression.RPKM conservation.phyloP
1               1.042607              6.94700           0.0000000
2               1.095876             88.64500           0.3780292
3               1.035408            103.73833           0.5133217
4                     NA             33.71667           0.5185620
5               1.056457              8.13000           0.4469873
  chromosome essential
1          I        NA
2          I        NA
3          I        NA
4          I         1
5          I        NA

如果您使用ggplot并将数据转换为整齐的格式(即长格式),则可以按照注释中的建议,轻松使用ggplot一次绘制多个箱线图

我不确定我是否完全理解您的意图,但如果您希望每个对比区都有一个箱线图,结合上述对比区中所有基因的基因表达,这是一个可能的解决方案(我没有使用您的所有数据,因为以您呈现的方式将其输入R是一项相当大的努力):


@Em Laskey有你问题答案的要点。这里只是稍微长一点的演练

在这里,我创建了一个假数据集,但没有失去通用性

set.seed(1234)
df <- data.frame(gene = rep(c("A", "B"), each = 5),
                 Mitochondrion = rbinom(10, 1, 0.5),
                 Golgi = rbinom(10, 1, 0.5),
                 expression = runif(10, 0, 100))
df
#   gene Mitochondrion Golgi expression
#1     A             0     1  31.661245
#2     A             1     1  30.269337
#3     A             1     0  15.904600
#4     A             1     1   3.999592
#5     A             1     0  21.879954
#6     B             1     1  81.059855
#7     B             0     0  52.569755
#8     B             0     0  91.465817
#9     B             1     0  83.134505
#10    B             1     0   4.577026
因此,在最初的广域格式中,每一行都包含了线粒体和高尔基体中基因存在的信息。但在长格式中,每一行只包含一个基因在一个隔间中的存在。结果,数据帧的大小增加了一倍(这里有2个隔室,在您的情况下,7个隔室将是原始大小的7倍)

从你的评论来看,你想把所有的基因混合起来。所以我们真的不需要关心基因柱的操纵。由于我们只关心基因存在的位置,因此我们可以删除
Presence==0的所有观察结果。我们使用
dplyr
package
filter()
函数来实现:

df_long_pres <- df_long %>%
  filter(Presence == 1)
df_long_pres
## A tibble: 11 x 4
#   gene  expression Compartment   Presence
#   <chr>      <dbl> <chr>            <int>
# 1 A          31.7  Golgi                1
# 2 A          30.3  Mitochondrion        1
# 3 A          30.3  Golgi                1
# 4 A          15.9  Mitochondrion        1
# 5 A           4.00 Mitochondrion        1
# 6 A           4.00 Golgi                1
# 7 A          21.9  Mitochondrion        1
# 8 B          81.1  Mitochondrion        1
# 9 B          81.1  Golgi                1
#10 B          83.1  Mitochondrion        1
#11 B           4.58 Mitochondrion        1

你能创建和共享任何样本数据吗?@DeathMetal我在主帖子中编辑了一些样本数据,我不确定这是我应该展示的方式,还是有更好的方式将其添加到帖子中?您好,欢迎访问:)请查看以下链接以查找相关指南。例如,要生成最小数据集,可以使用
head()
subset()
。然后使用
dput()
给我们一些可以立即放入R的东西。或者,您可以使用基本R数据集,如
mtcars
iris
,等等。不清楚您在寻找什么样的箱线图。。。所以说在图中,它应该有7个条代表7个隔间,每个图代表一个基因?e、 g.10个基因=10个图乘以7条?或者你是把所有的基因混合在一起,单纯地观察每个隔间中所有基因的
gene.expression.RPKM
分布情况?使用
tidyr
dplyr
包中的函数,你可以试着得到一个至少包含以下信息的表格:
gene
gene.expression.RPKM
和另一个带有隔间名称的。那就很容易画出地图了。基本
plot
ggplot
不使用相同类型的表来制作图形。顺便说一句,不需要分割数据。您的代码工作得很好。我真的不完全理解它是如何工作的,但现在我有了明确的方向,我应该读什么来了解更多。非常感谢。非常感谢您的详细回复,我想我理解console中发生的一切。对一个非常环保的人来说绝对是非常有帮助的。
# data I used:
> dput(dat)
structure(list(gene = structure(1:5, .Label = c("SPAC1002.01", 
"SPAC1002.02", "SPAC1002.03c", "SPAC1002.04c", "SPAC1002.05c"
), class = "factor"), NumberIntrons = c(1L, 0L, 0L, 0L, 0L), 
    NumResidues = c(179L, 229L, 923L, 199L, 715L), protein_coding = c(1L, 
    1L, 1L, 1L, 1L), ncRNA = c(0L, 0L, 0L, 0L, 0L), Rel_telomere = structure(1:5, .Label = c("0.4768186", 
    "0.4770079", "0.4772343", "0.4782177", "0.4784627"), class = "factor"), 
    mRNA_copies_per_cell = structure(c(1L, 4L, 5L, 3L, 2L), .Label = c("0.46", 
    "0.52", "1.4", "3.8", "7.2"), class = "factor"), protein_copies_per_cell = structure(c(NA, 
    2L, 3L, 1L, NA), .Label = c("1600.25", "2564.51", "9719.87"
    ), class = "factor"), mRNA.stabilities = structure(c(4L, 
    3L, 5L, 2L, 1L), .Label = c("20.38781", "26.73106", "32.34325", 
    "38.30908", "47.75722"), class = "factor"), GeneticDiversity = structure(c(1L, 
    2L, 3L, 5L, 4L), .Label = c("0.0024331", "0.0025389", "0.0041078", 
    "0.0043057", "0.0043796"), class = "factor"), ProteinHalfLife = structure(c(NA, 
    1L, 3L, 2L, NA), .Label = c("177.6", "756.3", "959.8"), class = "factor"), 
    Golgi = c(0L, 0L, 0L, 0L, 0L), Mitochondrion = c(1L, 0L, 
    0L, 0L, 0L), Nuclear_dots = c(0L, 0L, 0L, 0L, 0L), solid.media.KO.fitness = structure(c(2L, 
    4L, 1L, NA, 3L), .Label = c("1.035408", "1.042607", "1.056457", 
    "1.095876"), class = "factor"), gene.expression.RPKM = structure(c(3L, 
    5L, 1L, 2L, 4L), .Label = c("103.73833", "33.71667", "6.947", 
    "8.13", "88.645"), class = "factor"), conservation.phyloP = structure(c(1L, 
    2L, 4L, 5L, 3L), .Label = c("0", "0.3780292", "0.4469873", 
    "0.5133217", "0.518562"), class = "factor")), class = "data.frame", row.names = c(NA, 
-5L))
set.seed(1234)
df <- data.frame(gene = rep(c("A", "B"), each = 5),
                 Mitochondrion = rbinom(10, 1, 0.5),
                 Golgi = rbinom(10, 1, 0.5),
                 expression = runif(10, 0, 100))
df
#   gene Mitochondrion Golgi expression
#1     A             0     1  31.661245
#2     A             1     1  30.269337
#3     A             1     0  15.904600
#4     A             1     1   3.999592
#5     A             1     0  21.879954
#6     B             1     1  81.059855
#7     B             0     0  52.569755
#8     B             0     0  91.465817
#9     B             1     0  83.134505
#10    B             1     0   4.577026
df_long <- df %>%
  pivot_longer(c(Mitochondrion, Golgi),
               names_to = "Compartment",
               values_to = "Presence")
df_long
## A tibble: 20 x 4
#   gene  expression Compartment   Presence
#   <chr>      <dbl> <chr>            <int>
# 1 A          31.7  Mitochondrion        0
# 2 A          31.7  Golgi                1
# 3 A          30.3  Mitochondrion        1
# 4 A          30.3  Golgi                1
# 5 A          15.9  Mitochondrion        1
# 6 A          15.9  Golgi                0
# 7 A           4.00 Mitochondrion        1
# 8 A           4.00 Golgi                1
# 9 A          21.9  Mitochondrion        1
#10 A          21.9  Golgi                0
#11 B          81.1  Mitochondrion        1
#12 B          81.1  Golgi                1
#13 B          52.6  Mitochondrion        0
#14 B          52.6  Golgi                0
#15 B          91.5  Mitochondrion        0
#16 B          91.5  Golgi                0
#17 B          83.1  Mitochondrion        1
#18 B          83.1  Golgi                0
#19 B           4.58 Mitochondrion        1
#20 B           4.58 Golgi                0
df_long_pres <- df_long %>%
  filter(Presence == 1)
df_long_pres
## A tibble: 11 x 4
#   gene  expression Compartment   Presence
#   <chr>      <dbl> <chr>            <int>
# 1 A          31.7  Golgi                1
# 2 A          30.3  Mitochondrion        1
# 3 A          30.3  Golgi                1
# 4 A          15.9  Mitochondrion        1
# 5 A           4.00 Mitochondrion        1
# 6 A           4.00 Golgi                1
# 7 A          21.9  Mitochondrion        1
# 8 B          81.1  Mitochondrion        1
# 9 B          81.1  Golgi                1
#10 B          83.1  Mitochondrion        1
#11 B           4.58 Mitochondrion        1
ggplot(df_long_pres) +
  geom_boxplot(aes(x = Compartment, y = log10(expression)))