105

私はここで関数を使用してheatmap使用しようとしています以下の私のコードです:ggplot2geom_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は私の治療条件の順序です。しかし、それはあまりうまく機能せず、ヒートボックスがありません。

4

2 に答える 2

139

完全で再現可能な例がなければ、特定の質問に答えるのは少し難しいです。ただし、このようなものは機能するはずです。

#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"))

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

于 2012-10-08T13:53:27.693 に答える
70

受け入れられた回答は、基礎となるデータフレームの変更を必要とするソリューションを提供します。これは必要ありません。呼び出し内で直接因数分解aes()するか、代わりにそのベクトルを作成することもできます。

これは確かにユーザーのDrewSteenの答えと大差ありませんが、元のデータフレームを変更しないという重要な違いがあります。

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()

それは最初のバージョンです

于 2018-02-26T22:53:39.337 に答える