6

次のようなデータフレームがあります。

        Samp1    Samp2    Samp3     Samp4    Samp5
Gene1    84.1     45.2     34.3      54.6     76.2
Gene2    94.2     12.4     68.0      75.3     24.8
Gene3    29.5     10.5     43.2      39.5     45.5
...

x軸がサンプル(Samp1-5)、y軸が行(Gene1-3など)である散布図を作成しようとしていますが、各行のデータをプロットしたいと思います。同じプロット上の異なる色として。

Rでこれを行う方法について何か考えはありますか?私は、ggplot2、lattice、car、またはRの他のパッケージを喜んで使用します。

4

4 に答える 4

2

これが解決策ggplot2です:

データ:

dat <- read.table(text="Samp1    Samp2    Samp3     Samp4    Samp5
  Gene1    84.1     45.2     34.3      54.6     76.2
  Gene2    94.2     12.4     68.0      75.3     24.8
  Gene3    29.5     10.5     43.2      39.5     45.5", header = TRUE)

プロット:

library(ggplot2)  
ggplot(stack(dat), aes(x = ind, y = values, colour = rownames(dat))) +
  geom_point()

ここに画像の説明を入力してください

于 2012-11-20T09:37:36.400 に答える
1

これをlatticeまたはggplot2で実行する場合は、データを長い形式に再形成する必要があります。reshape関数またはreshape2パッケージを参照してください。

ベースグラフィックスの場合、関数はおそらく希望どおりに動作します。軸の目盛りとして1から5までの数字だけが必要ない場合はmatplot、x軸を抑制し、関数を使用して独自のグラフィックスを追加する必要があります。axis

于 2012-11-19T22:41:29.430 に答える
0

データをマトリックスに入れます。

foo <- as.matrix(structure(list(Samp1 = c(84.1, 94.2, 29.5),
    Samp2 = c(45.2, 12.4, 10.5),Samp3 = c(34.3, 68, 43.2),
    Samp4 = c(54.6, 75.3, 39.5),Samp5 = c(76.2, 24.8, 45.5)),
  .Names = c("Samp1", "Samp2","Samp3", "Samp4", "Samp5"),
  class = "data.frame", row.names = c("Gene1","Gene2", "Gene3")))

そしてプロット:

plot(seq(1,ncol(foo)),foo[1,],xlab="",ylab="",xaxt="n",
  pch=21,bg=1,ylim=c(min(foo),max(foo)))
axis(side=1,at=seq(1,ncol(foo)),labels=colnames(foo))
for ( ii in 2:nrow(foo) ) points(seq(1,ncol(foo)),foo[ii,],pch=21,col=ii,bg=ii)

数字()で色を循環していることに注意してくださいcol=ii,bg=ii。を参照してください?palette

もご覧ください?legend

散布図

于 2012-11-20T09:26:26.180 に答える
0

tidyverseの導入後、推奨される方法は、tidyrを使用してデータを長い形式に変換することです。例えば

dat <- read.table(text="Gene Samp1    Samp2    Samp3     Samp4    Samp5
  Gene1    84.1     45.2     34.3      54.6     76.2
  Gene2    94.2     12.4     68.0      75.3     24.8
  Gene3    29.5     10.5     43.2      39.5     45.5", header = TRUE)

dat %>% 
  # transform data to long form
  tidyr::gather("sample", "value", contains("Samp")) %>%
  # plot the data
  ggplot(aes(x = sample, y = value, col = Gene)) + geom_point()
于 2019-09-04T08:26:37.460 に答える