2017-03-21 5 views
0

면을 사용하여 각기 다른 MLB 부문에 대한 그래프가있는 2 개의 그래프로 6 개의 그래프를 작성하려고합니다. 각 그래프의 제목뿐만 아니라 그래프의 제목이 전체적으로 나뉘어지기를 원합니다. AL East 팀의 색상이 포함되어 있지만 그 색상은 다른 모든 부서로 변환되지 않으므로 모든 팀의 색상을 나열하려면 어떻게해야합니까?R 6 개 부문 모두 MLB 우승을위한 2x3을 생성하는면

cust <- c("#FC4C00", "#C60C30", "#1C2841", "#79BDEE","#003DA5",...,) 

으로 계속 나열 하시겠습니까? 아니면 5 가지 색상으로 6 가지 목록이 있습니까?

각 팀의 데이터와 각 팀의 데이터를 포함하고 시도한 프로그램이 있습니다.

도움을 주시면 감사하겠습니다.

df <- read.table(textConnection(
    'Year ARI ATL BAL BOS CHC CHW CIN CLE COL DET HOU KCR LAA LAD MIA MIL MIN NYM NYY OAK PHI PIT SDP SFG SEA STL TBR TEX TOR WSN 
    2016 69 68 89 93 103 78 68 94 75 86 84 81 74 91 79 73 59 87 84 69 71 78 68 87 86 86 68 95 89 95 
    2015 79 67 81 78 97 76 64 81 68 74 86 95 85 92 71 68 83 90 87 68 63 98 74 84 76 100 80 88 93 83 
    2014 64 79 96 71 73 73 76 85 66 90 70 89 98 94 77 82 70 79 84 88 73 88 77 88 87 90 77 67 83 96 
    2013 81 96 85 97 66 63 90 92 74 93 51 86 78 92 62 74 66 74 85 96 73 94 76 76 71 97 92 91 74 86 
    2012 81 94 93 69 61 85 97 68 64 88 55 72 89 86 69 83 66 74 95 94 81 79 76 94 75 88 90 93 73 98 
    2011 94 89 69 90 71 79 79 80 73 95 56 71 86 82 72 96 63 77 97 74 102 72 71 86 67 90 91 96 81 80 
    2010 65 91 66 89 75 88 91 69 83 81 76 67 80 80 80 77 94 79 95 81 97 57 90 92 61 86 96 90 85 69 
    2009 70 86 64 95 83 79 78 65 92 86 74 65 97 95 87 80 87 70 103 75 93 62 75 88 85 91 84 87 75 59 
    2008 82 72 68 95 97 89 74 81 74 74 86 75 100 84 84 90 88 89 89 75 92 67 63 72 61 86 97 79 86 59 
    2007 90 84 69 96 85 72 72 96 90 88 73 69 94 82 71 83 79 88 94 76 89 68 89 71 88 78 66 75 83 73 
    2006 76 79 70 86 66 90 80 78 76 95 82 62 89 88 78 75 96 97 97 93 85 67 88 76 78 83 61 80 87 71 
    2005 77 90 74 95 79 99 73 93 67 71 89 56 95 71 83 81 83 83 95 88 88 67 82 75 69 100 67 79 80 81 
    2004 51 96 78 98 89 83 76 80 68 72 92 58 92 93 83 67 92 71 101 91 86 72 87 91 63 105 70 89 67 67 
    2003 84 101 71 95 88 86 69 68 74 43 87 83 77 85 91 68 90 66 101 96 86 75 64 100 93 85 63 71 86 83 
    2002 98 101 67 93 67 81 78 74 73 55 84 62 99 92 79 56 94 75 103 103 80 72 66 95 93 97 55 72 78 83 
    2001 92 88 63 82 88 83 66 91 73 66 93 65 75 86 76 68 85 82 95 102 86 62 79 90 116 93 62 73 80 68 
    2000 85 95 74 85 65 95 85 90 82 79 72 77 82 86 79 73 69 94 87 91 65 69 76 97 91 95 69 71 83 67 
    1999 100 103 78 94 67 75 96 97 72 69 97 64 70 77 64 74 63 97 98 87 77 78 74 86 79 75 69 95 84 68 
    1998 65 106 79 92 90 80 77 89 77 65 102 72 85 83 54 74 70 88 114 74 75 69 98 89 76 83 63 88 88 65'), header = TRUE) 

df2 <- read.table(textConnection(
    'Division  Team 
    ALEast  BAL 
    ALEast  BOS 
    ALEast  NYY 
    ALEast  TBR 
    ALEast  TOR 
    ALCentral CHW 
    ALCentral CLE 
    ALCentral DET 
    ALCentral KCR 
    ALCentral MIN 
    ALWest  HOU 
    ALWest  LAA 
    ALWest  OAK 
    ALWest  SEA 
    ALWest  TEX 
    NLEast  ATL 
    NLEast  MIA 
    NLEast  NYM 
    NLEast  PHI 
    NLEast  WSN 
    NLCentral CHC 
    NLCentral CIN 
    NLCentral MIL 
    NLCentral PIT 
    NLCentral STL 
    NLWest  ARI 
    NLWest  COL 
    NLWest  LAD 
    NLWest  SDP 
    NLWest  SFG'), header = TRUE) 

df <- gather(df, Team, Wins, -Year) %>% 
    mutate(Team = factor(Team, c("BAL", "BOS", "NYY","TBR","TOR"))) 

theme_set(theme_grey() + 
      theme(plot.title = element_text(hjust=0.5), 
        axis.title.y = element_text(angle = 0, vjust = 0.5), 
        panel.background = element_rect(fill = "gray"), 
        axis.ticks=element_blank())) 


cust <- c("#FC4C00", "#C60C30", "#1C2841", "#79BDEE","#003DA5") 
names(cust) <- levels(df$Team) 


ggplot(df, aes(x=Year, y=Wins, color = Team)) + 
    geom_path(aes(color = Team)) + #Change size= here to change size of lines in graph 
    scale_color_manual(values = cust) + 
    labs(title = "AL East Wins", 
     y = "Wins", 
     x = "Year")+ 
    facet_wrap(~division) + 
    guides(color=guide_legend("Team",override.aes=list(size=3))) 
+0

참고 사항 나는 새로운 질문을하기 때문에 새로운 질문으로. –

+0

ggplot2를 사용하고 있다고 가정합니까? 어떤 종류의 음모를 내고 있습니까? 예 : 바 플롯, 상자 플롯 등부서 정보를 사용하여 긴 형식으로 데이터를 다시 작성해야 할 수도 있습니다. 그런 다음 aes 채우기 또는 색상을 팀으로 설정 한 다음 사용자 정의 색상을 사용하여 scale_colour_manual 또는 scale_fill_manual을 원하는 색상/채우기 값으로 설정할 수 있습니다. 해당 순서로 팀과 색상을 분해하거나 데이터 프레임 내에 사용자 정의 색상을 포함 시켜서이 작업을 수행 할 수 있습니다. 추가 도움이 필요하면 현재 사용중인 코드를 게시하십시오. – Djork

+0

선 그림. 각 그래프의 모습을 보여줄 수 있습니다. –

답변

3

는 다음과 같은 데이터 처리 조정을 고려

  1. 은 열 이름을 부분 집합으로 모든 팀에 mutate() 호출 요소를 확장합니다.
  2. 모든 6 개 구획에 대해 rep으로 색 벡터를 복제합니다.
  3. 요인 수준을 재정렬하여 AL/NL 분할로 나란히 제시 할 수 있습니다.
  4. 디비전 두 데이터 프레임을 병합하여 facet_wrap에 전달할 열로 지정하십시오.

R 코드

library(tidyr) 
library(ggplot2) 
library(dplyr) 

... 

df <- gather(df, Team, Wins, -Year) %>% 
    mutate(Team = factor(Team, names(df)[2:ncol(df)])) 

df3 <- merge(df, df2, by="Team") 
df3$Division <- factor(df3$Division, 
         levels = c("ALEast", "NLEast", "ALCentral", "NLCentral", "ALWest", "NLWest")) 

cust <- rep(c("#FC4C00", "#C60C30", "#1C2841", "#79BDEE","#003DA5"), 6) 

Facet_Wrap 그래프

데이터 처리 후는, 을 NcoI를 지정 facet_wrap ggplot 전화 nrow 2 X 3 레이아웃 구성 용 인수 .

ggplot(df3, aes(x=Year, y=Wins, color = Team)) + 
    geom_path(aes(color = Team)) + #Change size= here to change size of lines in graph 
    scale_color_manual(values = cust) + 
    labs(title = "AL East Wins", 
     y = "Wins", 
     x = "Year")+ 
    facet_wrap(~Division, ncol=2, nrow=3) + 
    guides(color=guide_legend("Team",override.aes=list(size=3))) 

당신이 알 수 그러나

ggplot 같은 팀 모두가 공유 같은 전설과 제목은 전체 그래프 같은 전설/제목을 사용합니다.

First Graph Plot Output

Grid.Arrange 그래프

는 동적 독특한 타이틀 dataframe를 필터링하고 전달할 수 gridExtra의 grid.arrange에 배치 여러 그래프를 고려, 위의 해결하려면 :

library(gridExtra) 

mlb_plots <- lapply(c("ALEast", "NLEast", "ALCentral", "NLCentral", "ALWest", "NLWest"), function(d) { 
    ggplot(df3[df3$Division==d,], aes(x=Year, y=Wins, color = Team)) + 
    geom_path(aes(color = Team)) + #Change size= here to change size of lines in graph 
    scale_color_manual(values = cust) + 
    labs(title = paste(substr(d, 1, 2), substr(d, 3, nchar(as.character(d)))), # FOR SPACE BETWEEN AL/NL AND REST 
      y = "Wins", 
      x = "Year") + 
    guides(color=guide_legend("Team",override.aes=list(size=3))) 
    }) 

do.call(grid.arrange, mlb_plots) 

Second Graph Plot Output

+0

감사합니다! 그래프를 복제하는 대신 다른 색상을 원한다면 어떻게할까요? "빨간색", "파란색"등의 일반적인 색상을 지침으로 사용할 수 있습니다. –

+0

나는 rep (c (6 개의 다른 색깔의 명부), (6 개의 다른 색깔의 명부), ...,)를 할 는가 것입니다? –

+0

다른 그래프에서는'grid.arrange' 접근법을 의미합니다. 6 개의 색상 벡터 목록을 전달하고'lapply' 대신'Map' (래핑하여'mapply')를 사용하여 반복적으로 각 * Division (둘 다 같은 길이의 6을 나열합니다) : Map (함수 (d, c) {ggplot (... c와 c를 대체하십시오.}, DivisionList, ColorList). – Parfait