패치 워크 패키지로 인수에 따라 플롯 표시

알 버슨 미란다

함수에 patchwork전달 된 인수에 따라 플롯이 표시되는 패키지로 함수를 작성하려고 합니다. 함수에서 전달되지 않은 개체를 NULL로 설정하여 아래 접근 방식을 시도했습니다. 그러나 첫 번째 개체가 NULL과 다른 경우에만 작동합니다. 이견있는 사람?

# 1. PACKAGES

library(tidyverse)
library(patchwork)

# 2. DATA

data = starwars

# 3. FUNCTION

plot_people = function (homeworld = c("Tatooine", "Naboo", "Alderaan")) {

  p1 = if (is.element("Tatooine", homeworld)) {

    data %>%
    filter(homeworld == "Tatooine") %>%
    ggplot(aes(x = mass, y = height,
               label = ifelse(species == "Human", name, NA))) +
    geom_point() +
    geom_label()

  } else {

    NULL
  }

  p2 = if (is.element("Naboo", homeworld)) {

    data %>%
      filter(homeworld == "Naboo") %>%
      ggplot(aes(x = mass, y = height,
                 label = ifelse(species == "Human", name, NA))) +
      geom_point() +
      geom_label()

  } else {

    NULL
  }

  p3 = if (is.element("Alderaan", homeworld)) {

    data %>%
      filter(homeworld == "Alderaan") %>%
      ggplot(aes(x = mass, y = height,
                 label = ifelse(species == "Human", name, NA))) +
      geom_point() +
      geom_label()

  } else {

    NULL
  }

  # how to write this line in order to plot only objects in homeworld argument?
  p1 + p2 + p3

}

# 4. RESULTS

plot_people(homeworld = c("Naboo", "Tatooine"))

plot_people(homeworld = c("Naboo", "Alderaan"))
#> NULL

reprex 패키지 (v0.3.0)에 의해 2020-06-07에 생성됨

알리 스터

의 각 요소에 대해 동일한 코드를 실행해야하므로 (또는 원하는 경우)를 homeworld사용하여 반복 할 수 있습니다 . 이렇게하면 각 반복에 대한 요소가있는 목록이 반환되며 여기에는 플롯 (예 : , 등)이 포함됩니다. 이 목록은 각 요소를 반복적으로 결합하기 위해 d (또는 d)가 될 수 있습니다 .purrr::maplapplyp1p2reduceReduce+

library(tidyverse)
library(patchwork)

plot_people = function (homeworld = c("Tatooine", "Naboo", "Alderaan")) {

    plots <- map(homeworld, function(hw){
        starwars %>%
            filter(homeworld == hw) %>%
            ggplot(aes(x = mass, y = height,
                       label = ifelse(species == "Human", name, NA))) +
            geom_point() +
            geom_label()
    })

    reduce(plots, `+`)
}

plot_people(homeworld = c("Naboo", "Tatooine"))

plot_people(homeworld = c("Naboo", "Alderaan"))

또는 대신 플롯 목록을 허용하는 패치 워크 함수를 사용하여을 reduce(plots, `+`)작성할 수 있습니다. 결과는 동일합니다.wrap_plots(plots)wrap_plots()

더 일반적으로 패치 워크를 사용하기 전에 패싯을 고려해야합니다.

library(tidyverse)

plot_people = function (homeworld = c("Tatooine", "Naboo", "Alderaan")) {
    starwars %>%
        filter(homeworld %in% !!homeworld) %>%
        ggplot(aes(x = mass, y = height,
                   label = ifelse(species == "Human", name, NA))) +
        geom_point() +
        geom_label() + 
        facet_wrap(~homeworld)
}

plot_people(homeworld = c("Naboo", "Tatooine"))

plot_people(homeworld = c("Naboo", "Alderaan"))

이 방법을 사용하면 어떤 행성이 무료인지 식별 ​​할 수있는 멋진 패널 스트립 레이블을 얻을 수 있습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

규칙에 따라 즉시 네트워크 패킷 수정

분류에서Dev

패치 워크 플롯 R에 grob 추가

분류에서Dev

패치 워크 메인 제목과 플롯 제목 사이에 범례 추가

분류에서Dev

GitHub 작업 워크 플로에서 APT 패키지 캐싱

분류에서Dev

플롯으로 표현하는 서브 플롯에 따라 다른 주석?

분류에서Dev

플러터 유형에 따라 네트워크의 SVG 또는 이미지 표시

분류에서Dev

플라스크에 따라 동적으로 달콤한 경고 표시

분류에서Dev

매개 변수에 따라 동적으로 노드 패키지 설치

분류에서Dev

수동 설치로 표시하지 않고`apt upgrade` 패키지?

분류에서Dev

ggmap 패키지는지도에 채워진 다각형을 플롯합니다.

분류에서Dev

RStudio 창 크기 및 플로팅 방법에 따라 플롯 모양 변경

분류에서Dev

첫 번째 패널에 따라 ggplot2의 다중 패널 플롯에서 요인 정렬

분류에서Dev

Python에서 서로 다른 패키지의 플롯

분류에서Dev

가져온 패키지에 따라 Python / Dill 직렬화 해시?

분류에서Dev

npm 및 bower 업데이트는 네트워크에 따라 대부분의 시간에 실패합니다.

분류에서Dev

시간이 지남에 따라 패키지의 인기를 추적합니까?

분류에서Dev

설치시 "네트워크"를 선택하라는 메시지가 표시되지만 네트워크 인터페이스 카드가 표시됩니다.

분류에서Dev

설치시 "네트워크"를 선택하라는 메시지가 표시되지만 네트워크 인터페이스 카드가 표시됩니다.

분류에서Dev

코어 플롯 라인이 표시되지 않음

분류에서Dev

패키지 git 워크 플로가있는 Laravel 앱

분류에서Dev

패키지 탐색기 내에서 이클립스 플러그인 팝업을 표시 할뿐만 아니라

분류에서Dev

장치 크기에 따라 jinja 템플릿에서 배치 인수를 동적으로 변경하는 방법

분류에서Dev

Pylab 플롯에 플롯 포인트가 표시되지 않음

분류에서Dev

플롯에 텍스트 위치가 표시되지 않음

분류에서Dev

Laravel의 워크 벤치에서 패키지를 얻는 방법

분류에서Dev

시즌 패키지는 스플라인을 지원합니까?

분류에서Dev

내장 패키지에 따라 다름

분류에서Dev

Powershell 워크 플로 내에서 변수 표시

분류에서Dev

Nuget Push (패키지 업데이트)-패키지 관리자에 새 설치로 표시

Related 관련 기사

  1. 1

    규칙에 따라 즉시 네트워크 패킷 수정

  2. 2

    패치 워크 플롯 R에 grob 추가

  3. 3

    패치 워크 메인 제목과 플롯 제목 사이에 범례 추가

  4. 4

    GitHub 작업 워크 플로에서 APT 패키지 캐싱

  5. 5

    플롯으로 표현하는 서브 플롯에 따라 다른 주석?

  6. 6

    플러터 유형에 따라 네트워크의 SVG 또는 이미지 표시

  7. 7

    플라스크에 따라 동적으로 달콤한 경고 표시

  8. 8

    매개 변수에 따라 동적으로 노드 패키지 설치

  9. 9

    수동 설치로 표시하지 않고`apt upgrade` 패키지?

  10. 10

    ggmap 패키지는지도에 채워진 다각형을 플롯합니다.

  11. 11

    RStudio 창 크기 및 플로팅 방법에 따라 플롯 모양 변경

  12. 12

    첫 번째 패널에 따라 ggplot2의 다중 패널 플롯에서 요인 정렬

  13. 13

    Python에서 서로 다른 패키지의 플롯

  14. 14

    가져온 패키지에 따라 Python / Dill 직렬화 해시?

  15. 15

    npm 및 bower 업데이트는 네트워크에 따라 대부분의 시간에 실패합니다.

  16. 16

    시간이 지남에 따라 패키지의 인기를 추적합니까?

  17. 17

    설치시 "네트워크"를 선택하라는 메시지가 표시되지만 네트워크 인터페이스 카드가 표시됩니다.

  18. 18

    설치시 "네트워크"를 선택하라는 메시지가 표시되지만 네트워크 인터페이스 카드가 표시됩니다.

  19. 19

    코어 플롯 라인이 표시되지 않음

  20. 20

    패키지 git 워크 플로가있는 Laravel 앱

  21. 21

    패키지 탐색기 내에서 이클립스 플러그인 팝업을 표시 할뿐만 아니라

  22. 22

    장치 크기에 따라 jinja 템플릿에서 배치 인수를 동적으로 변경하는 방법

  23. 23

    Pylab 플롯에 플롯 포인트가 표시되지 않음

  24. 24

    플롯에 텍스트 위치가 표시되지 않음

  25. 25

    Laravel의 워크 벤치에서 패키지를 얻는 방법

  26. 26

    시즌 패키지는 스플라인을 지원합니까?

  27. 27

    내장 패키지에 따라 다름

  28. 28

    Powershell 워크 플로 내에서 변수 표시

  29. 29

    Nuget Push (패키지 업데이트)-패키지 관리자에 새 설치로 표시

뜨겁다태그

보관