열의 각 수준이 R에서 해당 열의 다른 모든 수준과 비교되는 산점도 행렬을 어떻게 생성합니까?

셀린 디온

final_2type이 각 행의 값이 계산 된 GWAS를 식별 하는 테이블 이 있습니다.

> final_2
                   geneid      BPcum   genesymbol type   TWAS.Z   TWAS.P
    1:  ENSG00000272438.1     910406 RP11-54O7.16  aoi -0.75885 0.447942
    2:  ENSG00000230699.2     913192  RP11-54O7.1  aoi -0.94690 0.343688
    3:  ENSG00000223764.2     918941  RP11-54O7.3  aoi -0.66248 0.507661
    4: ENSG00000187634.11     934255       SAMD11  aoi -0.52081 0.602502
    5: ENSG00000187961.13     963152       KLHL17  aoi  0.22512 0.821883
   ---                                                                  
61176:  ENSG00000205559.3 2871588859     CHKB-AS1   si  1.96200 0.049800
61177:  ENSG00000206841.1 2871696719    RNU6-409P   si -0.78246 0.434000
61178:  ENSG00000225929.1 2871742389   AC000036.4   si  0.70652 0.480000
61179: ENSG00000100312.10 2871747173          ACR   si -0.01373 0.989000
61180:  ENSG00000254499.1 2871747464   AC002056.5   si  0.76906 0.442000

두 산점도 사이에 존재하는 상관 관계를 시각적으로 파악하기 위해 각 플롯이 서로 겹쳐진 두 산점도를 보여주는 산점도 행렬을 만들고 싶습니다.

내가 사용하는 일부 진전을 ggplot하고 ggpairs. ggplot코드 는 다음과 같습니다 .

sample_test <- sample_n(final_2, 10000)

ggplot(sample_test, aes(x = BPcum, y = TWAS.Z, color = type)) + 
    geom_point() +
    facet_grid(~ type)

ggplot 분산 그리드

보시다시피 가깝지만 거기에는 없습니다. Y 축에서 각 typeGWAS를 GWAS의 서로 비교 하는 상관 관계도처럼 type되길 바랍니다.

ggpairs코드는 다음과 같습니다 .

final_wide <-
        dcast(final_2,
              geneid + genesymbol ~ type,
              value.var = c("TWAS.Z"))
> final_wide
                   geneid      genesymbol       aoi       cpd       dpw        sc        si
    1: ENSG00000000419.12            DPM1  0.566609 -1.826550 -0.062600 -0.087280 -0.172400
    2: ENSG00000000457.13           SCYL3 -1.101820 -1.126189 -0.352060 -1.449136  1.867089
    3: ENSG00000000460.16        C1orf112  1.534340 -0.607821 -0.160940  1.407573  1.243600
    4: ENSG00000000938.12             FGR  1.302000 -1.085000 -0.490000 -0.678000 -1.661000
    5: ENSG00000001460.17           STPG1 -0.436960 -0.885166 -0.536580 -1.541952  0.601034
   ---                                                                                     
12240:  ENSG00000283672.1         MIR4678 -0.584710  0.616161 -0.091148  1.202870 -0.905510
12241:  ENSG00000283675.1 snoMe28S-Am2634  1.002720  0.074320 -1.658840  0.929563 -1.011690
12242:  ENSG00000283683.1     RP3-454G6.2  0.548000  0.249000  0.157000  0.147000  0.142000
12243:  ENSG00000283696.1  RP11-122G18.12  0.029400  0.905570 -1.972690  0.435826 -0.924870
12244:  ENSG00000283699.1         MIR4481 -1.280010  0.605154  0.546647  1.366070 -0.303850

ggpairs(final_wide %>% select(-c(geneid, genesymbol)))

ggpairs 행렬

이것은 내가 원하는 것에 훨씬 더 가깝지만 내 문제는이 모든 플롯 ( "정확한"사각형 또는 곡선)의 위쪽 절반이 필요하지 않으며의 미학을 변경하는 방법을 알 수 없다는 것입니다. 과도하게 플롯하기 때문에 알파를 줄이거 나 type.

의견 있으십니까? 난 둘 다 사용하여 열려있어 ggplotggpairs.

스테판

광범위한 데이터를 기반으로 원하는 결과를 얻는 한 가지 방법은 별도의 산점도를 만들고 patchwork다음을 사용하여 함께 붙이는 것입니다 .

  1. 열 ( var1)에 대한 변수로 벡터 만들기
  2. 행에 대한 변수가있는 목록을 만듭니다 ( var2).
  3. 를 사용하여 벡터와 목록을 반복합니다 map2.
  4. 내부 에서 각 열 변수 및 해당 행 변수에 대한 플롯 목록을 만드는 데 map2사용 map됩니다. 또한를 사용하여 enpty 패널로 목록을 채우십시오 plot_spacer.
  5. 결과는 내가 사용하여 간단한 목록으로 변환하는 목록의 목록입니다 reduce
  6. 마지막으로 사용 wrap_plots하여 별도의 플롯을 함께 붙입니다.
  7. 패싯을 모방하기 위해 몇 가지 if조건을 사용하여 축 레이블, 텍스트 및 선을 조건부로 제거합니다.

편집 물론 색상을 추가 할 수도 있습니다. 그러나 내 접근 방식의 단점은 가이드를 수집 한 후에도 4 개의 전설이된다는 것입니다. 따라서 단일 색상 범례를 모방하기 위해 범례 간격과 여백을 조정해야했습니다.


library(ggplot2)
library(patchwork)
library(purrr)

make_plot <- function(df, var1, var2) {
  df$var1 <- var1
  df$var2 <- var2
  xlabel <- if (var2 == "si") var1 else NULL
  ylabel <- if (var1 == "aoi") var2 else NULL
  color_label <- if (var1 == "aoi") "type" else NULL
  xaxis <- if (var2 != "si") theme(axis.text.x = element_blank(), axis.ticks.x = element_blank()) else NULL
  yaxis <- if (var1 != "aoi") theme(axis.text.y = element_blank(), axis.ticks.y = element_blank()) else NULL
  ggplot(df, aes(x = .data[[var1]], y = .data[[var2]], color = var1)) +
    geom_point() +
    scale_color_manual(values = cols, labels = var1) +
    labs(x = xlabel, y = ylabel, color = color_label) +
    xaxis +
    yaxis
}

var1 <- names(final_wide)[-c(1:2)]
var2 <- lapply(1:4, function(x) var1[(x + 1):5])

cols <- scales::hue_pal()(5)
cols <- setNames(cols, var1)
labs <- setNames(var1, var1)

plot_list <- map2(var1[1:4], var2, function(var1, var2) {
  blank <- rep(list(plot_spacer()), 4 - length(var2))
  map(var2, ~ make_plot(final_wide, var1, .x)) %>% c(blank, .)
})
plot_list <- reduce(plot_list, c)

wrap_plots(plot_list, nrow = 4, byrow = FALSE) +
  plot_layout(guides = "collect") &
  theme(legend.spacing.y = unit(0, "pt"),
        legend.margin = margin(1, 1, 1, 1 , "pt"),
        legend.title = element_text(margin = margin(0, 0, 3, 0, "pt")))

데이터

final_wide <- structure(list(geneid = c(
  "ENSG00000000419.12", "ENSG00000000457.13",
  "ENSG00000000460.16", "ENSG00000000938.12", "ENSG00000001460.17",
  "ENSG00000283672.1", "ENSG00000283675.1", "ENSG00000283683.1",
  "ENSG00000283696.1", "ENSG00000283699.1"
), genesymbol = c(
  "DPM1",
  "SCYL3", "C1orf112", "FGR", "STPG1", "MIR4678", "snoMe28S-Am2634",
  "RP3-454G6.2", "RP11-122G18.12", "MIR4481"
), aoi = c(
  0.566609,
  -1.10182, 1.53434, 1.302, -0.43696, -0.58471, 1.00272, 0.548,
  0.0294, -1.28001
), cpd = c(
  -1.82655, -1.126189, -0.607821, -1.085,
  -0.885166, 0.616161, 0.07432, 0.249, 0.90557, 0.605154
), dpw = c(
  -0.0626,
  -0.35206, -0.16094, -0.49, -0.53658, -0.091148, -1.65884, 0.157,
  -1.97269, 0.546647
), sc = c(
  -0.08728, -1.449136, 1.407573, -0.678,
  -1.541952, 1.20287, 0.929563, 0.147, 0.435826, 1.36607
), si = c(
  -0.1724,
  1.867089, 1.2436, -1.661, 0.601034, -0.90551, -1.01169, 0.142,
  -0.92487, -0.30385
)), class = "data.frame", row.names = c(
  "1:",
  "2:", "3:", "4:", "5:", "12240:", "12241:", "12242:", "12243:",
  "12244:"
))

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관