-axis ggplot [duplicate]에서 여러 요인 변수 정렬
Nov 17 2020
x 축 표시 순서에 대한 몇 가지 질문을 보았지만 여전히 내 문제를 해결할 수는 없습니다. 두 개의 다른 변수에서 10 개의 변수를 계산하는 플롯을 만들려고합니다. 내 변수는 요인이며 구조는 다음과 같습니다.
crime_1 crime_2 ...... crime_10
Yes No Yes
Yes Yes No
No Yes No
이 코드를 사용했습니다.
new_data %>%
pivot_longer(cols = starts_with("crime")) %>%
filter(value != 0) %>%
unite(crime,name, value) %>%
ggplot(aes(x = crime )) +
geom_bar(aes(fill = wave), position = position_dodge2(preserve = "single"))+ theme(axis.text.x=element_text(angle=90,hjust=1))+ggtitle("Crime")
출력은 crime_1, crime_2, ......., crime_10이 아니고 crime_1, crime_10, crime_2, ,,,,입니다. 내가 사용하고 scale_x_discrete(drop = FALSE )
fct_inorder하고, ().
순서에 따라 변수를 만들어야합니다. 감사합니다
답변
1 Ben Nov 18 2020 at 00:02
언급했듯이 x 축의 순서는 숫자 순서가 아니라 알파벳 순서입니다. 이를 수정하는 한 가지 방법이 있습니다.
패키지 의 str_sort
기능을 사용하여 다음을 수행 stringr
할 수 있습니다.
vec <- c("sb_1_x", "sb_10_b", "sb_11_c", "sb_2_y")
vec
[1] "sb_1_x" "sb_10_b" "sb_11_c" "sb_2_y"
중간 번호로 주문 :
str_sort(vec, numeric = T)
[1] "sb_1_x" "sb_2_y" "sb_10_b" "sb_11_c"
이 경우 sb
가 요인 인지 확인 str_sort
하고 요인 수준을 설정하는 데 사용 합니다. 또한 x 축 레이블의 이름을 변경했습니다 (필요한 것으로 바꿀 수 있음). 함께 모아서:
library(tidyverse)
library(ggplot2)
library(stringr)
df %>%
pivot_longer(cols = starts_with("sb")) %>%
filter(value != 0) %>%
unite(sb, name, value) %>%
ggplot(aes(x = factor(sb, levels = str_sort(unique(sb), numeric = TRUE)))) +
geom_bar(aes(fill = wave), position = position_dodge2(preserve = "single")) +
xlab("x-axis label")
음모

cookesd Nov 17 2020 at 23:16
crime
순서가 지정된 수준으로 요인을 만드십시오 . 전체 데이터 세트를 볼 수 없으므로 단순히 crime_1, crime_2, ..., crime_10이 아니라면 레벨을 변경해야 할 수도 있습니다.
new_data %>%
pivot_longer(cols = starts_with("crime")) %>%
filter(value != 0) %>%
unite(crime,name, value) %>%
# make crime a factor with ordered levels crime_1,crime_2,...,crime_10
mutate(crime = factor(crime,levels = paste('crime',1:10,sep='_')) %>%
ggplot(aes(x = crime )) +
geom_bar(aes(fill = wave), position = position_dodge2(preserve = "single"))+ theme(axis.text.x=element_text(angle=90,hjust=1))+ggtitle("Crime")
``