programing

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

css3 2023. 6. 4. 22:30

알파벳 순서 대신 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는 나의 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()직통 전화를 걸다나는 왜 한계를 설정하는 것이 당신에게 효과가 없는지 확신할 수 없습니다. 나는 당신이 레벨 벡터에 오타가 있을 수 있기 때문에 NA를 받는다고 생각합니다.

아래 내용은 사용자 Drew Steen의 답변과 크게 다르지 않지만, 원본 데이터 프레임을 변경하지 않는 것이 중요한 차이점입니다.

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

p <- ggplot(iris)
p + geom_bar(aes(x = factor(Species, level = level_order)))


## or directly in the aes() call without a pre-created vector:
p + geom_bar(aes(x = factor(Species, level = c('virginica', 'versicolor', 'setosa')))) 
## plot identical to the above - not shown

## or use your vector as limits in scale_x_discrete
p + geom_bar(aes(x = Species)) + 
  scale_x_discrete(limits = level_order) 

repref v2.0.2를 사용하여 2022-11-20에 생성됨

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