2013-06-24 2 views
0

이것이 스택 오버플로 범위를 벗어나는 지 확실하지 않습니다. 만약 그렇다면 알려주세요.캐치 데이터를 시각화하는 더 좋은 방법

내 입력 data.

468 개의 다른 캡처 세션 중에 잡힌 개인의 크기 분포를 시각화 (또는 아직 결정되지 않은 분석을 수행)하려고합니다. 캡처 세션은 "id"로 레이블이 지정되어 있고 단순화를 위해 1 : 468에서 세션 번호가 매겨진 새로운 컬럼 "newID"를 만들었습니다. 코드에 관심이있는 사람이라면이 새로운 컬럼을 만들 수있는 멋진 루프를 만들었습니다. 플로팅 크기는 "SL"열에 있습니다.

또한 주어진 캡처 세션이 진행되는 동안 "날짜", "연도", "월", "위치"및 "크릭"을 나타내는 열이 있습니다. 데이터는 분명히 더 작은 세그먼트로 분할 될 수 있습니다 (예 : 4 개 크릭이 있으므로 각 크릭에 대해 별도의 플롯을 수행 할 수 있음). 그러나 이것이 유일한 옵션이 아니면 그 도로를 내려가는 것을 원하지 않습니다.

지금까지 내가 "년"으로 각면 간단한 예비 음모를 수행 한 다음 코드 (단지 데이터가 너무 가까이 놓지 않도록 단순함에 대한) :

library(ggplot2) 
CreekDat <-read.table("CreekData.txt",header=TRUE) 
CreekData4<-data.frame(CreekDat) 

DOT <-ggplot(CreekData4,aes(newID,SL,color=factor(newID))) 
DOT<-DOT+facet_grid(Year~.) 
DOT<-DOT+stat_boxplot(aes(x = newID,y=SL)) 
DOT 

그리고이 결과를 가지고 http://ufsnook.smugmug.com/photos/i-psJZ6kw/0/X3/i-psJZ6kw-X3.jpg

~ 500 개의 이벤트가있어서 크기 분포를 보여주고 싶습니다. 누군가이 데이터에 도움이 될 수있는 다른 플롯팅 옵션을 알고 있다면 boxplots 내에서 작업 할 수있는 조언을 받았는지 궁금합니다. 현재 사용하고 있거나 볼 수있는 비 시각적 분석을위한 아이디어가 있습니다.

+0

타일 플롯을 시도해보십시오. x는 시간이고, y는 크기이며, 색상은 카운트이고, 크릭은 패싯입니까? 나는 시간이있을 때 이것을 음모로 꾸밀 수도 ... –

+0

'시간'은 '날짜'또는 'newID'를 의미합니까? '날짜'마다 여러 개의 'ID'가있을 수 있습니다 (특정 날짜에 최대 15 회의 캡처 세션이있는 경우가 있음) 개별 캡처 세션은 개별 날짜보다 내 용도에 훨씬 더 중요합니다. 나는 이것이 어디로 가고 싶은지 모르겠다 ... 그래서 우리는 색을 위해 (즉, 주어진 세션/ID에서 잡힌 사람들의 수) 할 것인가? 그 부분을하는 방법에 대한 제안? – user1399311

+0

캡처 세션 시간이 있습니까? 그것들을 추가 할 수 있다면 그것은 그 차원을 보는데 도움이 될 것입니다. 나는 우리가 비공개로 할 수있는 빈을 보관해야한다고 생각합니다. 나에게 한두 시간 만주세요 ... –

답변

2

이것은 재미있었습니다. 나는 데이터를 묶고 집계하는 것을 끝내었다.

enter image description here

그것은 플롯의 색상을 해결하기 위해 몇 가지 작업을 필요로하지만 너무 열심히 안 :

require(ggplot2) 

# read the file into a data frame 
CreekData <-read.table("CreekData.txt",header=TRUE) 

# fix the date 
CreekData$Date <- as.POSIXct(paste(CreekData$Year, 
            CreekData$Month, 
            "1 12:00", 
            sep = "-"), 
          format = "%y-%m-%d %H:%M", 
          tz = "GMT") 
# bin the size 
CreekData$SL.binned <- cut(CreekData$SL, 
          breaks = c(seq(0,500,50),1000), 
          labels = c(paste(seq(0,450,50), 
              "-", 
              seq(50,500,50)), 
             ">500"), 
          right = FALSE, 
          ordered_result = TRUE) 
# add something we can sum! 
CreekData$SL.bin.count <- rep(1,length(CreekData$SL.binned)) 

# aggregate it 
CreekDataAg <- aggregate(x = CreekData$SL.bin.count, 
         by = list("Date" = CreekData$Date, 
            "Location" = CreekData$Location, 
            "SL.binned" = CreekData$SL.binned), 
         FUN = sum) 
names(CreekDataAg)[4] <- "Count" 

# plot it 
p <- ggplot(data = CreekDataAg, 
      aes(x = Date, 
       y = SL.binned)) + 
    geom_tile(aes(fill = Count, 
       color = Count), 
      size = 0) + 
    facet_wrap(~Location) + 
    scale_fill_gradient(name = "Count", 
         low = "grey50", 
         high = "steelblue") + 
    scale_color_gradient(low = "grey50", 
         high = "steelblue") + 
    scale_y_discrete(drop=FALSE) + 
    labs(title = expression(atop("Count by size interval", 
           atop(italic("something else")))), 
     x = "Date", 
     y = "Size range") + 
    theme_bw(base_size = 8, base_family = "") 
print(p) 

당신은 다음과 같습니다 음모와 끝까지.

newID을 입력하고 음영에 Date을 대입하여 ID별로 분류 할 수도 있습니다. 그걸로 당신을 ...

enter image description here

+0

매우 근사합니다. 내가 따라하고 있는지 확실하지 않은 한 가지. 주어진 하루 내에 모든 데이터를 통합하고 있습니까? 다시 말해, 주어진 날짜에 5 개의 캡처 이벤트 (서로 다른 ID)가있는 경우 여기에있는 모든 이벤트가 하나의 x 축 지점으로 축소되어 있습니까? – user1399311

+0

시간 데이터가 없기 때문에 모든 캡처 이벤트를 일별로 집계합니다. 원한다면 집계와 플로팅에서 '날짜'를 newID로 바꿀 수 있습니다. 나는 이것의 예를 추가했다. –

+0

아! 아주 멋지다. 감사! – user1399311

관련 문제