1. ホーム
  2. r

[解決済み] ggplot2 の x 軸をアルファベット順ではなく、具体的にどのように並べるのですか?[重複しています。]

2022-03-10 16:45:33

質問

を作ろうとしているのですが 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軸のラベルの順番を指定できるようにしたいのです。今回は、"Treatment"の順番を指定しようと思っています。デフォルトでは、アルファベット順に並びます。これを上書きして、元の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"))

しかし、これはレベルがたくさんある場合には危険です。どれかを間違えると、問題が発生します。