2014-12-04 3 views
6

3 행 5 열 패싯 플롯이 있습니다. 각 행은 서로 다른 범위에 걸쳐있는 데이터를 보여줍니다. 모든 것이 표시되도록 데이터를 올바르게 표시하려면 y 축 제한을 설정하지 마십시오.ggplot2에서 패싯 플롯의 각 행에 대한 y 축 제한을 변경하십시오.

require(reshape2) 
library(ggplot2) 
library(RColorBrewer) 

fileName = paste("./data_test.csv", sep = "") 

## data available here: https://dl.dropboxusercontent.com/u/73950/data_test.csv 

mydata = read.csv(fileName,sep=",", header=TRUE) 

dataM = melt(mydata,c("id")) 
dataM = cbind(dataM, 
      colsplit(dataM$variable, 
        pattern = "_", 
        names = c("Network_model", "order", "category"))) 
dataM$variable <- NULL 
dataM <- dcast(dataM, ... ~ category, value.var = "value") 
dataM$minCut <- NULL 
dataM$nbr_communities <- NULL 
dataM$mean_community_size <- NULL 
dataM$density <- NULL 

my_palette <- colorRampPalette(rev(brewer.pal(11, "Spectral"))) 

dataM = melt(dataM, id.vars = c("Network_model", "order", "nodesRemoved", "id")) 

my_palette = c(brewer.pal(5, "Blues")[c(4)], brewer.pal(5, "Set1")[c(3)]) 

ggplot(dataM, aes(x= nodesRemoved ,y= value, group= order, color= order)) + 
    geom_point(size = .6,alpha = .15,position="jitter") + ## increased size 
    stat_smooth(se = FALSE, size = .5, alpha = .1, method = "loess") + 
    scale_color_manual(values=my_palette) + 
    theme_bw() + 
    theme(plot.background = element_blank(), 
     axis.line = element_blank(), 
     legend.key = element_blank(), 
     legend.title = element_blank(), 
     axis.text.x = element_text(size = 8), 
     axis.text.y = element_text(size = 8) 
     ) + 
    scale_y_continuous("Value") + 
    scale_x_continuous("Time", limits=c(0, 100)) + 

    facet_grid(variable ~ Network_model,scales="free") 

이 생산 : 여기

내 코드의 나는 세 개의 행 각각에 대해 선택적으로 설정 한계를하고 싶습니다 지금

enter image description here

을 첫 번째 행 있도록 한계 = c (1.9, 3)이고, 두 번째는 한계 = c (0, 1)이고 세 번째 한계는 = c (.3, .7)입니다.

어떻게 이것을 패싯의 ggplot2에서 수행 할 수 있습니까?

+1

(나는 처음에 더 명확하게 범인을 볼 점 더 큰했다)하지만 쉽지 않을 것이다. 내가 너라면 3 줄을 만들겠다. 그런 다음 일반적인 방법으로 y 축 제한을 설정 한 다음 행을 예를 들어'grid.arrange '와 함께 고정 할 수 있습니다. (당신이 예제를 재현 가능하게하지 않는 한 코드에 대한 답을 얻을 수 있을지는 의문이다.) – Gregor

+1

'ggplot'으로 한계를 정해도 괜찮다면,'scales = "free_y"'가 아니라'scales = "무료". 귀하의 데이터를 보지 않고도 이것이 귀하가 찾고자하는 것이 맞는지 짐작할 수 없습니다. – Gregor

+0

감사합니다. Gregor, 데이터 집합과 전체 코드를 추가했습니다! 건배! – Rodolphe

답변

3

데이터를 플로팅하기 전에 데이터를 잘라내는 것이 가장 좋습니다. dplyr으로,

enter image description here

library(dplyr) 
limits <- data.frame(variable = levels(dataM$variable), 
        min = c(1.9,0,0.3), 
        max = c(3,1,0.7)) 
dataC <- inner_join(dataM, limits) %>% filter(value > min, value < max) 

last_plot() %+% dataC 

이이 측면에 가능하다

+0

환상적이며 훌륭한 작품입니다. 덕분에 Baptiste! – Rodolphe

관련 문제