code

알파벳 순서 대신 ggplot2 x 축을 구체적으로 어떻게 주문합니까?

codestyles 2020. 11. 11. 20:12
반응형

알파벳 순서 대신 ggplot2 x 축을 구체적으로 어떻게 주문합니까?


이 질문에 이미 답변이 있습니다.

여기 기능을 heatmap사용 ggplot2하여 만들려고하는데 geom_tiles아래 코드가 있습니다.

p<-ggplot(data,aes(Treatment,organisms))+geom_tile(aes(fill=S))+
  scale_fill_gradient(low = "black",high = "red") + 
  scale_x_discrete(expand = c(0, 0)) + 
  scale_y_discrete(expand = c(0, 0)) + 
  theme(legend.position = "right", 
    axis.ticks = element_blank(), 
    axis.text.x = element_text(size = base_size, angle = 90, hjust = 0, colour = "black"),
    axis.text.y = element_text(size = base_size, hjust = 1, colour = "black")).

데이터는 내 data.csv 파일입니다.
내 X 축은 치료 유형입니다.
내 Y 축은 유기체 유형입니다.

나는 명령과 프로그래밍에 너무 익숙하지 않으며 상대적으로 이것에 익숙하지 않습니다. x 축에서 레이블의 순서를 지정할 수 있기를 원합니다. 이 경우에는 "치료"의 순서를 지정하려고합니다. 기본적으로 알파벳순으로 정렬됩니다. 이것을 재정의하고 원본 csv 파일과 동일한 순서로 데이터를 유지하려면 어떻게해야합니까?

이 명령을 시도했습니다

scale_x_discrete(limits=c("Y","X","Z"))

여기서 x, y 및 z는 치료 조건 순서입니다. 그러나 그것은 잘 작동하지 않으며 열 상자가 없어졌습니다.


완전하고 재현 가능한 예가 없으면 특정 질문에 답하기가 조금 어렵습니다. 그러나 다음과 같은 것이 작동합니다.

#Turn your 'treatment' column into a character vector
data$Treatment <- as.character(data$Treatment)
#Then turn it back into a factor with the levels in the correct order
data$Treatment <- factor(data$Treatment, levels=unique(data$Treatment))

이 예에서 요인의 순서는 data.csv파일 에서와 동일 합니다.

다른 주문을 선호하는 경우 직접 주문할 수 있습니다.

data$Treatment <- factor(data$Treatment, levels=c("Y", "X", "Z"))

그러나 레벨이 많으면 위험합니다. 레벨이 잘못되면 문제가 발생합니다.


가장 많이 받아 들여지는 답변은 기본 데이터 프레임을 변경해야하는 솔루션을 제공합니다. 이것은 필요하지 않습니다. aes()호출 내에서 직접 인수 분해 하거나 대신 벡터를 생성 할 수도 있습니다 .

이것은 @Drew Steen의 답변과 크게 다르지 않지만 원래 데이터 프레임을 변경하지 않는 중요한 차이점이 있습니다.

level_order <- c('virginica', 'versicolor', 'setosa') #this vector might be useful for other plots/analyses

ggplot(iris, aes(x = factor(Species, level = level_order), y = Petal.Width)) + geom_col()

또는

level_order <- factor(iris$Species, level = c('virginica', 'versicolor', 'setosa'))

ggplot(iris, aes(x = level_order, y = Petal.Width)) + geom_col()

또는 사전 생성 된 벡터없이
직접 aes()호출 :

ggplot(iris, aes(x = factor(Species, level = c('virginica', 'versicolor', 'setosa')), y = Petal.Width)) + geom_col()

그것은 첫 번째 버전입니다

참고 URL : https://stackoverflow.com/questions/12774210/how-do-you-specifically-order-ggplot2-x-axis-instead-of-alphabetical-order

반응형