2017-05-24 5 views
2

저는 facet_wrap에서 얻은 3x3 격자가있는 플롯을 만듭니다. 9 개의 플롯 중 8 개의 플롯은 geom_violin을 사용하고 나머지 플롯은 geom_bar을 사용하여 만듭니다. 사이트에서 도움이되는 답변을 찾은 후에이 모든 것이 효과가 있습니다. 내가 가지고있는 문제는 내 막대 차트에 을 사용하면이 줄이 그려집니다. 안에는 막대가 그려져 있습니다.ggplot2 막대 내부에 막대가있는 막 대형 차트

다음은 몇 가지 예제 코드 및 그림입니다. 내 질문에

이제
library(tidyverse) 
n <- 100 
tib <- tibble(value = c(rnorm(n, mean = 100, sd = 10), rbinom(n, size = 1, prob = (1:4)/4)), 
       variable = rep(c("IQ", "Sex"), each = n), 
       year = factor(rep(2012:2015, n/2))) 
ggplot(tib, aes(x = year, y = value)) + 
    facet_wrap(~variable, scales = "free_y") + 
    geom_violin(data = filter(tib, variable == "IQ")) + 
    geom_bar(data = filter(tib, variable == "Sex"), stat = "identity", 
      color = "black", fill = "white") 

enter image description here

: 어떻게이 바 내부에이 라인을 제거합니까? 나는 그저 검은 색 테두리가 흰색이되기를 원합니다. 나는 다양한 구성으로 많은 실험을 해왔고, 선을 없애 버릴 수는 있지만 패싯을 망가뜨릴 희생이있었습니다. 나는 그것이 stat와 관련이 있다고 확신하지만, 나는 그것을 고치려고 노력하고있다. 어떤 제안?

+1

정말로 패싯을 사용하고 싶습니까? 축이 실제로 다르므로 2 개의 플롯을 별도로 작성하는 것이 더 쉽습니다. 'library (cowplot) ' – FlorianGD

+0

@FlorianGD 공통된 제목과 모든 것을 가지고 모든 플롯을 간단하게 만들 수 있습니다. 그들은 모두 동일한 x 축을 공유합니다. 하지만 어쩌면 나는 '카우 플롯'을 조사해야 할 것입니다. – hejseb

+1

검은 막대는 tib $ 값의 값을 자동으로 스택하기 때문에 나타납니다. position_dodge 또는 첫 번째 평균을 1 년마다 사용할 수 있습니다. 우선 당신이 얻고 자하는 것, 가치의 비율을 아는 것이 중요합니다. – timfaber

답변

3

내가 barplot 내의 데이터를 요약 제안 :

ggplot(tib, aes(x = year, y = value)) + 
    facet_wrap(~variable, scales = "free_y") + 
    geom_violin(data = filter(tib, variable == "IQ")) + 
    geom_bar(data = tib %>% 
      group_by(year,variable) %>% 
      summarise(value=sum(value)) %>% 
      filter(variable == "Sex"), 
      stat = "identity", 
      color = "black", 
      fill = "white") 
+0

그것은 매력처럼 작동했습니다. 감사. – hejseb

3

나는 이것이 매우 다른 것을 나타내는 다른 패널의 y 축으로 데이터를 표현하는 좋은 방법입니다 확실하지 않다, 예가 실제 사용 사례와 일치하지 않을 수도 있음을 인정합니다. 별도의 플롯을 작성한 다음 gridExtra::grid.arrange 또는 cowplot::plot_grid을 사용하는 것이 더 좋은 해결책 일 수 있습니다. 당신이 geom_col 오히려 geom_bar보다 사용이

ggplot(tib, aes(x = year, y = value)) + 
    facet_wrap(~variable, scales = "free_y") + 
    geom_violin(data = filter(tib, variable == "IQ")) + 
    geom_col(data = filter(tib, variable == "Sex") %>% 
        group_by(year, variable) %>% 
        summarise(value = sum(value)), 
    fill = "white", colour = "black") 

을 수행하려는 경우

하지만 그래서 stat = identity를 사용할 필요가 없습니다.

+0

나는 분명히 cowplot을 살펴볼 것입니다. (예전에 gridExtra를 사용 했었습니다. 그러나 여기서는 제 목표를 위해 조금 복잡하다고 생각했습니다. 특히 국경으로 줄거리를 작성할 수 있었기 때문에). (CMichael은 2 분 빠르므로 그 대답을 받아 들였습니다.) – hejseb

+0

dplyr이 독립 코더에서 거의 동일한 코드를 산출하는 것을 좋아합니다. – CMichael