0

連続変数x、因子y、および連続変数zを含むデータフレームがあります

説明のために仮定します

x <- 1:5
y <- c("A", "B", "C", "D", "E")

z.a<-sort(sample(x=seq(0,1,0.1),size=5, replace=F))
z.b<-sort(sample(x=seq(0,1,0.1),size=5, replace=F))
z.c<-sort(sample(x=seq(0,1,0.1),size=5, replace=F))
z.d<-sort(sample(x=seq(0,1,0.1),size=5, replace=F))
z.e<-sort(sample(x=seq(0,1,0.1),size=5, replace=F))

今、私は次のプロットを構築したいと思います

plot(x,y, yaxt="n", type="n",ylim=c(0,5),yaxs="i")
axis(2, at=seq(0.5,4.5,1), labels=c("A", "B", "C", "D", "E"))
abline(h=0:5)

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

yここで、 (y軸に表示される)の各レベルについて、それぞれのz値に応じてボックスを色で塗りつぶしたいと思います。たとえば、プロットのは、でA埋める必要があります。z.aBz.b

すべてz同じスケール(0,1)の値が含まれており、減少するにつれて常に減少しますx

このようなプロットを実行するパッケージはありますか?いいえの場合、ベースRでどのようにコーディングできますか?

私はベースRソリューションを好みますが、それが不可能な場合は他のソリューションでもかまいません。

あるいは、プロットは、xの全範囲に及ぶ、yの各レベルの水平棒グラフと見なすことができ、その色は(各xで)zに起因します。

4

1 に答える 1

1

ggplot2これがライブラリを使用した解決策です。

まず、すべてのデータを1つのデータフレームに入れます。

df<-data.frame(x = rep(1:5,times=5),
               y = rep(c("A", "B", "C", "D", "E"),each=5),
               z= c(sort(sample(x=seq(0,1,0.1),size=5, replace=F)),
                    sort(sample(x=seq(0,1,0.1),size=5, replace=F)),
                    sort(sample(x=seq(0,1,0.1),size=5, replace=F)),
                    sort(sample(x=seq(0,1,0.1),size=5, replace=F)),
                    sort(sample(x=seq(0,1,0.1),size=5, replace=F))))

次に、を使用して、値に応じてgeom_tile()各レベルの色を取得します。yz

library(ggplot2)
ggplot(df,aes(x=x,y=y,fill=z))+geom_tile()+
  scale_x_continuous(expand = c(0, 0)) + scale_y_discrete(expand = c(0, 0))

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

UPDATE-関数イメージを使用したソリューション

image()基本システムの機能によっても同様の結果が得られます。

まず、z関数を使用してすべての値を1つのデータフレームに入れますcbind()。また、新しいx値とy値を作成しました。

z2<-cbind(z.a,z.b,z.c,z.d,z.e)
x2<-1:5
y2<-1:5

z関数を使用して値をプロットしますimage()。次に、関数を使用して軸を追加しますaxis()image.plot()ライブラリから凡例機能を表示するためにfields使用されます。どちらの機能でも、同じcol=設定を使用する必要があります。image.plot()プロット全体を生成できますが、この関数では軸を適切に変更できません。

par(mar=c(5,5,5,8)) #sets space for legend on right side
image(x2,y2,z2,axes=F,col=rainbow(10))
axis(1,at=1:5)
axis(2,at=1:5,labels=c("A", "B", "C", "D", "E"))
box()
library(fields)
image.plot(x2,y2,z2,legend.only=T,col=rainbow(10))

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

于 2013-01-16T18:35:00.867 に答える