2014-09-01 3 views
4

에서 빈 줄을 제거합니다. 나는이 같은 ggplot 및 geom_tile를 사용하여 찾고 있어요 그래서내가 5 열 데이터 프레임을 가지고 geom_tile

N1 N2  Type  rang  crit 
125 1 SST-T_2m 41.86395 BE_proba 
125 1 T_2m-SST 163.41217 BE_proba 
100 1 SST-T_2m 32.88181 BE_proba 
100 1 T_2m-SST 137.44479 BE_proba 
80 1 SST-T_2m 22.57176 BE_proba 
80 1 T_2m-SST 112.52334 BE_proba 
70 1 SST-T_2m 21.30066 BE_proba 
70 1 T_2m-SST 99.65523 BE_proba 
60 1 SST-T_2m 18.48731 BE_proba 
60 1 T_2m-SST 85.36945 BE_proba 
50 1 SST-T_2m 18.60074 BE_proba 
50 1 T_2m-SST 71.58960 BE_proba 
40 1 SST-T_2m 18.58180 BE_proba 
40 1 T_2m-SST 62.82670 BE_proba 
30 1 SST-T_2m 20.53982 BE_proba 
30 1 T_2m-SST 48.58923 BE_proba 
20 1 SST-T_2m 27.15737 BE_proba 
20 1 T_2m-SST 36.04175 BE_proba 
125 5 SST-T_2m 101.82300 BE_proba 
125 5 T_2m-SST 168.69954 BE_proba 
100 5 SST-T_2m 91.10644 BE_proba 
... 

나는 단지 하나의 그래프에서 모든 정보를 갖고 싶어 : 여기 내 데이터 프레임의 시작의 예 (Rang_final)입니다

p <- ggplot(Rang_final) 
p <- (p 
     + geom_tile(data=Rang_final[Rang_final$Type=="SST-T_2m",], aes(x=N1, y=N2, fill=rang)) 
     + geom_tile(data=Rang_final[Rang_final$Type=="T_2m-SST",], aes(x=N2, y=N1, fill=rang)) 
     + scale_fill_gradient2(name="Rang", low="deepskyblue",mid="yellow",high="red", midpoint=100, na.value = "grey50") 
     + theme(axis.title.x = element_text(size=14, face="bold"), 
      axis.title.y = element_text(size=14, face="bold"), 
      strip.text.x = element_text(size=14, face="bold"), 
      strip.text.y = element_text(size=14, face="bold"), 
      axis.text=element_text(size=14), 
      axis.title.y=element_text(size=14, face="bold"), 
      legend.key=element_rect(size=0.5, colour="black"), 
      legend.text=element_text(size=10), 
      legend.margin=unit(0,"lines"), 
      legend.key.size=unit(0.8,"cm"), 
      legend.text.align=0) 
    + theme_bw() 

) 

print(p) 
R

하지만 내가 FA로 N1과 N2를 변환하려고 그래서 빈 줄을 제거하려면 :

그리고 이것이 내가 무엇을 얻을 (N1과 N2의 클래스는 숫자입니다) ctors :

Rang_final$N1 <- factor(Rang_final$N1, levels = c("20", "30", "40", "50", "60", "70", "80", "100", "125") ,ordered = TRUE) 
Rang_final$N2 <- factor(Rang_final$N2, levels = c("1", "5", "10", "15", "20", "25", "30", "35", "40", "50", "60", "80", "100", "125") ,ordered = TRUE) 

R

하지만 여기 내 번호가 증가하는 순서로하지 않습니다. 여기

는 또한 요인으로 N1과 N2를 사용했지만, 난이 규모와 같은 그래프에서 두 가지 유형을 가지고 관리 할 수 ​​없습니다 :

p <- ggplot(Rang_final, aes(x=N1, y=N2)) 
p <- (p 
     + geom_tile(aes(fill=rang)) 
     + facet_grid(Type ~ crit, scales="free") 
     + scale_fill_gradient2(name="Rang", low="deepskyblue",mid="yellow",high="red", midpoint=100, na.value = "grey50") 
     + theme(axis.title.x = element_text(size=14, face="bold"), 
      axis.title.y = element_text(size=14, face="bold"), 
      strip.text.x = element_text(size=14, face="bold"), 
      strip.text.y = element_text(size=14, face="bold"), 
      axis.text=element_text(size=14), 
      axis.title.y=element_text(size=14, face="bold"), 
      legend.key=element_rect(size=0.5, colour="black"), 
      legend.text=element_text(size=10), 
      legend.margin=unit(0,"lines"), 
      legend.key.size=unit(0.8,"cm"), 
      legend.text.align=0) 
     + theme_bw() 

) 

R

수있는 사람의 도움을 나를?

답변

2

제 제안입니다. N1과 N2를 인수로 변환 할 때 x 축과 y 축 번호가 순서가 맞지 않는 이유는 원하는 순서를 지정하지 않기 때문입니다. 여기서는 overflow 패키지를 사용 했으므로 귀하의 데이터 프레임은 게시 한 것과 동일한 mydf입니다. 네가해야 할 일이 두 가지 있다고 생각해. 요소를 재 배열

1)

당신이 올바른 방법으로 당신의 요소 순서를 변경하는 것입니다 무엇이 필요

. 스크립트에서 문자를 요인으로 변환하면 이런 일이 발생했습니다. 당신이 unclass() 보면

#> mydf$N1 <- as.factor(mydf$N1) 
#> levels(mydf$N1) 
#[1] "20" "30" "40" "50" "60" "70" "80" "100" "125" 
#> unclass(mydf$N1) 
#[1] 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 9 9 
#attr(,"levels") 
#[1] "20" "30" "40" "50" "60" "70" "80" "100" "125" 

, 당신은 "20"당신은 unclass() 1을 가지고 "20"를 원하는 9.을 가지고 참조하십시오. 이러한 이유로 데이터 프레임을 정렬하려고합니다. 이로 인해 이상한 번호 순서가 생겼습니다. 문자를 인수로 변환하기 전에 N1과 N2를 정렬하여 인수로 변환해야합니다.

library(dplyr) 
# Sort mydf by N1 
mydf <- arrange(mydf, N1) 

# Convert N1 to factor 
mydf$N1 <- as.factor(mydf$N1) 

여기서 "20"은 클래스가 1이고 "125"가 9 인 것을 알 수 있습니다. 원하는 순서입니다.

#> levels(mydf$N1) 
#[1] "20" "30" "40" "50" "60" "70" "80" "100" "125" 
#> unclass(mydf$N1) 
#[1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 9 9 
#attr(,"levels") 
#[1] "20" "30" "40" "50" "60" "70" "80" "100" "125" 

2)

데이터 부분 집합이/필요하지 않을 수있다. 그러나 지금까지 나는 이것이 필요하다고 생각한다. 다음은 좋지 않은 것 같습니다.

+ geom_tile(data=Rang_final[Rang_final$Type=="SST-T_2m",], aes(x=N1, y=N2, fill=rang)) 
    + geom_tile(data=Rang_final[Rang_final$Type=="T_2m-SST",], aes(x=N2, y=N1, fill=rang)) 

그래서 저는 데이터 정리를 위해 속임수를 사용했습니다.

# Subset data using dplyr 
america <- filter(mydf, Type == "SST-T_2m") 
brazil <- filter(mydf, Type == "T_2m-SST") 

# Reverse N1 and N2 in brazil (So N1 is actually N2, and N2 is actually N1) 
colnames(brazil) <- c("N2","N1", "Type", "rang", "crit") 
brazil[,c(2,1,3:5)] 

원본 데이터를 서브 세트하고 브라질 데이터 프레임으로 트릭을 한 후에, 나는 그들을 결합했습니다. 그런 다음 앞서 언급 한 것처럼 요인 순서를 정렬합니다.

canada <- rbind(america, brazil) 
canada <- arrange(canada,N1) 
canada$N1 <- as.factor(canada$N1) 

canada <- arrange(canada,N2) 
canada$N2 <- as.factor(canada$N2) 

이제 그림을 그립니다. 전 어떻게 든 전설과 관련된 문제가 있습니다. 그래서 여기에서 그들을 제거했습니다.

x <- ggplot(canada) 
x <- (x 
    + geom_tile(aes(x=N1, y=N2, fill =rang)) 
    + scale_fill_gradient2(name="Rang", low="deepskyblue",mid="yellow",high="red",  midpoint=100, na.value = "grey50") 
    + theme(axis.title.x = element_text(size=14, face="bold"), 
     axis.title.y = element_text(size=14, face="bold"), 
     strip.text.x = element_text(size=14, face="bold"), 
     strip.text.y = element_text(size=14, face="bold"), 
     axis.text=element_text(size=14), 
     axis.title.y=element_text(size=14, face="bold")) 
    + theme_bw() 

) 

이 기능이 작동하는지 알려주세요.

enter image description here

관련 문제