2017-02-15 7 views
2

처음으로 여기에서 묻는 것은 내가 충분히 명확하지 않으면 나를 용서해주십시오.ggplot2 막대 차트로 막대 정렬

지금까지 데이터 프레임의 일부 필드로 막대를 정렬하는 방법을 설명하는 유사한 질문에 대한 많은 답장을 보았습니다. 하지만 난 geom_bar의 기본 통계 "수"별로 정렬하는 방법을 찾을 수 없습니다있었습니다 예를 들어,이 코드를 실행 (분명히 데이터 프레임의 필드 NOT이다.) :

library(ggplot2) 

Name <- c('Juan','Michael','Andrea','Charles','Jonás','Juan','Donata','Flavia') 
City <- c('Madrid','New York','Madrid','Liverpool','Madrid','Buenos Aires','Rome','Liverpool') 
City.Id <- c(1,2,1,3,1,4,5,3) 
df = data.frame(Name,City,City.Id) 

a <- ggplot(df,aes(x = City, text=paste("City.Id=",City.Id))) + 
geom_bar() 

ggplotly(a) 

그리고 나서 높이 (= 개수)로 정렬 된 결과 막대를 시각화하고 싶습니다. 마지막 플롯에 표시 할 "City.Id"정보를 유지해야합니다. 어떻게 할 수 있습니까?

df$City <- reorder(df$City,df$City.Id,length) 

을 한 후 문제의 코드 플롯 :

답변

4

은 이미, 나는 tidyverse가 제공 할 수있는 다른 무엇으로 보는 게 좋을 것 ggplot2를 사용하고있는 점을 감안. 즉, 요인을 다루는 패키지 forcats.

forcats은 계수의 레벨을 빈도 순서로 재설정 (설정)하는 좋은 기능을 가지고 있습니다. 데이터가 아직 요소가 아닌 문자 벡터 인 경우 (예 : City이 데이터에있는 경우) 먼저 요인으로 만들고 빈도 순서로 수준을 설정합니다. ggplot에 대한 호출 내에서

# Load packages 
library(ggplot2) 
library(forcats) 

# Create data 
Name <- c('Juan','Michael','Andrea','Charles','Jonás','Juan','Donata','Flavia') 
City <- c('Madrid','New York','Madrid','Liverpool','Madrid','Buenos Aires','Rome','Liverpool') 
City.Id <- c(1,2,1,3,1,4,5,3) 
df = data.frame(Name,City,City.Id) 

# Create plot 
a <- ggplot(df, aes(x = fct_infreq(City), text=paste("City.Id=",City.Id))) + 
    geom_bar() 

a 
2

reorder를 사용할 수 있습니다.

enter image description here

+3

당신은 즉시이 작업을 수행 할 수 있습니다 :

이 코드를 사용해보십시오'ggplot (DF, AES (X = 재주문 (시, City.Id, 길이))) + geom_bar()'. – eipi10

+0

@thisisrg 나는 그 라인을 사용하려했지만 df는 그대로 유지했다. – Javi

+0

그림을 추가했다. '길이'를 잊었 니? – thisisrg