2017-12-09 5 views
0

ggplot2를 사용하여 그룹화 된 막대 그림을 만들려고합니다 (다른 패키지 일 수도 있음). 나는 이와 비슷한 몇 가지 다른 게시물이 있다는 것을 알고 있지만, 나의 구체적인 질문에 대답 한 것을 찾을 수 없었습니다. 그래서 그것이 중복되는 것 같으면 사과드립니다. 다른 질문과 답변 검색 다음 코드 제작 :은 Y에그룹화 된 막대 그래프의 빈도 데이터 프레임

### To remove unwanted rows from the larger data set### 

NestPatch=NestPatch[,c(3,34)] 

### Reshape data frame #### 

dfm <- melt(NestPatch[,c("VOR2Binned", "Factor")],id.vars = 1) 

내가 X 축에 VOR2Binned을하고 싶은, 주파수 및 요인 변수로 그룹화 VOR2Binned (0 또는 1), 어떤 나는 것 사용 및 임의로 이름을 바꾸는 것을 좋아합니다. 나는 위의 코드를 사용하여 다음의 순서 dataframe로 끝날

Factor VOR2Binned 

0 3 
1 3 
0 3 
1 3 
0 2 
1 2 
1 3 
0 2 
1 3 
0 2 
0 3 
1 3 
0 3 
1 3 
0 3 
1 3 
1 2 
0 3 
0 0 

:

여기 내 샘플 데이터입니다.

VOR2Binned variable value 

0 Factor 0 
0 Factor 0 
0 Factor 0 
0 Factor 0 
0 Factor 0 
2 Factor 1 
2 Factor 0 
2 Factor 0 
2 Factor 0 
2 Factor 1 
2 Factor 0 
2 Factor 0 
2 Factor 0 
2 Factor 0 
2 Factor 0 
2 Factor 0 
3 Factor 0 
3 Factor 1 
3 Factor 1 

내가 얻을

#### Plot #### 
    ggplot(dfm,aes(x = VOR2Binned,y = variable)) + 
    geom_bar(aes(fill = value),stat = "identity",position = "dodge") + 
    scale_y_log10() 

를 계속하는 경우 "평가에 오류 (EXPR, envir, enclos) : 개체를 찾을 수 없습니다 '요인'".

각 VOR2Binned 클래스의 빈도를 개발하는 단계가 빠져 있다고 생각합니다.

+0

당신이 재현 예제를 제공 주실 래요? 최소한 데이터의'str()'을 제공해야합니다. MWE는 데이터 세트를 이해하는 데 도움이되며 부족한 부분을 파악하는 데 도움이됩니다. –

+0

이해가 부족하여 죄송합니다. 적절한 정보를 제공해 드리고 싶습니다. MWE 란 무엇입니까? 이 플랫폼에서 str() 데이터를 제공하는 가장 좋은 방법은 무엇입니까? – user5613688

답변

0

당신이 data.table 사용 괜찮다면 ...

# generate your sample data 
require(data.table) 
dt <- data.table(structure(list(
Factor = c(0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 
1L, 1L, 0L, 0L), VOR2Binned = c(3L, 3L, 3L, 3L, 2L, 2L, 3L, 2L, 3L, 2L, 
3L, 3L, 3L, 3L, 3L, 3L, 2L, 3L, 0L)), .Names = c("Factor","VOR2Binned"), 
row.names = c(NA, -19L), class = c("data.table", "data.frame"))) 

# count occurrences for each VOR2Binned 
dt[, Frequency := .N, by=.(VOR2Binned, Factor)] 

# let's make sure column Factor is really a factor 
dt$Factor <- as.factor(dt$Factor) 
# change name to Used and Available 
levels(dt$Factor) <- c("Used", "Available") 

# let's ggplot it! 
ggplot(dt) + geom_col(aes(VOR2Binned, Frequency, fill=Factor), 
         position="dodge") 
+0

감사합니다. 완벽하게 작동합니다. data.frame을 사용하지 않을 이유가 있습니까? 나는 User 'baci'가 대답을 제시 한 방식 때문에 묻는다. – user5613688

+0

아마도 데이터를 사용하는 횟수를 계산하는 것입니다. N은 data.table에만 해당됩니다. 다른 방법을 사용하여 빈도를 세는 경우 나머지 코드는 상관없이 작동해야합니다. – baci

0

물론이 작업에 몇 시간을 보낸 후, 질문을 게시 한 후 잠시 후에 다른 방법을 찾았습니다.

dfm <- melt(NestPatch[,c("VOR2Binned", "Factor")],id.vars = 3) 
dfm <-with(NestPatch, table(VOR2Binned, Factor)) 
tbl <- with(NestPatch, table(Factor, VOR2Binned)); barplot(tbl, beside = TRUE, legend = TRUE) 

Used Available Plot

난 데이터 테이블을 구축하는 단계를 누락한다.

이제는 데이터를 시각화하는 것으로 충분하지만 누군가가 도움이 될 수 있다면 여전히 ggplot을 사용하여 데이터를 처리하는 방법을 찾고 싶습니다. 또한, 현재 사용되는 1과 0의 요소 코드에서 범례를 수정하고 사용하는 방법을 아는 사람이라면 크게 환영 할 것입니다. 미리 감사드립니다.

+0

또 다른 후속 조치로서 Y 축을 백분율로 수정하거나 각 막대 위에 관측치의 비율을 갖는 간단한 방법이 있습니까? – user5613688

관련 문제