내가 ggplot 2.2.0 및 http://www.cookbook-r.com/Graphs/Facets_(ggplot2)/에 따르면 R 버전 3.3.2 W64ggplot2 - 나는
를 사용하는 조회 테이블로 다른 dataframe를 사용하여 패싯 레이블 텍스트를 변경할 수 있습니다 어떻게 패싯 레이블을 제공하는 함수를 지정할 수 있습니다. 나는 연구의 환자 데이터를 플롯 :
나는 ID와 데이터와 dataframe를 가지고 있고, 나는 몇 가지 일반 정보 (나이, 성별)
patmeta <- data.frame(
"pat_id"=c(66, 103, 219, 64, 62, 111, 232),
"gender"=c("f","f","f", "m","f", "f", "f"),
"age"=c(56, 32, 73, 58,37,33,52))
를 포함하는 두 번째 dataframe이
나는 글로벌 라벨러 기능을 정의 내 pat_id을위한 특별 한 (pat_id_fac는 pat_id과 동일하지만, 인자로, pat_id 숫자입니다)
PatIdLabeller <- function(id) {
res <- sprintf("Pat %s (%i y, %s)", id,
subset(patmeta, pat_id == id)$age,
subset(patmeta, pat_id == id)$gender)
return(res)
}
globalLabeller <- labeller(
pat_id_fac = PatIdLabeller,
pat_id = PatIdLabeller,
.default = label_both
)
,536,913,632 10
PatIdLabeller 함수를 테스트하면 원하는 결과를 얻을 수 있습니다 (하위 집합을 사용하는 것이 가장 우아한 방법은 아닙니다).
> PatIdLabeller('103')
[1] "Pat 103 (32 y, f)"
는 그러나 ggplot에서이를 사용하여 ID가 올바른지,하지만 당신은 그림에서 보는 바와 같이 나이와 성별은 모두 같은 (patmeta의 마지막 행)에 대한 것입니다. 내 qdat의 부분 집합은 다른 질문에 대한 답변에서
structure(list(pat_id = c(103L, 103L, 103L, 64L, 64L, 64L, 66L,
66L, 66L, 219L, 219L, 219L, 62L, 62L, 62L, 111L, 111L, 111L,
232L, 232L, 232L), pat_id_fac = structure(c(4L, 4L, 4L, 2L, 2L,
2L, 3L, 3L, 3L, 6L, 6L, 6L, 1L, 1L, 1L, 5L, 5L, 5L, 7L, 7L, 7L
), .Label = c("62", "64", "66", "103", "111", "219", "232"),
class = c("ordered", "factor")),
Activity = structure(c(9L, 3L, 9L, 2L, 9L, 9L, 9L,
2L, 2L, 3L, 8L, 4L, 2L, 2L, 2L, 4L, 4L, 7L, 2L, 2L, 9L), .Label = c("",
"Anderes", "Essen", "Hausarbeit", "Hobbies", "Körperpflege",
"Liegen", "Medienkonsum", "Sozialer Kontakt"), class = "factor")),
.Names = c("pat_id", "pat_id_fac", "Activity"), row.names = c(1L, 2L, 3L,
128L, 129L, 130L, 199L, 200L, 201L, 217L, 218L, 219L, 343L, 344L, 345L,
397L, 398L, 399L, 451L, 452L, 453L), class = "data.frame")
g.bar.activities <-
ggplot(data=qdat, aes(x=Activity)) +
geom_bar() +
facet_wrap(~ pat_id_fac, labeller= globalLabeller)
을 따르고
, 나는 내가 문자 벡터를 정의 할 수 있습니다 알고 있지만, 내가 게으른 오전이 더 우아한 내 patmeta을 재사용하고 싶으면, 연구 참여자 명단이 꽤 길어지고 시간이 지남에 따라 발전하기 때문입니다. 작은 테스트 데이터와
는
t <- data.frame("pat_id"=c(103, 103, 103, 219, 219, 219),
"Activity" = c("sleep", "sleep", "eat", "eat", "eat", "sleep"))
patmeta <- data.frame("pat_id"=c(103, 219),
"gender"=c("m","f"), "age"=c(32,52))
ggplot(data=t, aes(x=Activity)) + geom_bar() +
facet_wrap(~pat_id, labeller=globalLabeller)
은 내가 정확히 원하는 것을 얻을 설정합니다. 나는 그 차이를 보지 못했다.
'qdat'없이 재생산 할 수 없습니다. – Axeman
다음을 읽어보십시오 : [위대한 R 재현 가능한 예제를 만드는 방법] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610) – Jaap
나는 dput - 원래 qdat 데이터 프레임의 서브 세트의 출력 –