15

通常は ggplot2 を使用しますが、この場合は通常のimage()関数を使用して大規模なデータ セットのヒートマップをプロットしています。すべてのラベルに赤のラベルを付けることができますが、生成した色定義のベクトルに基づいて、さまざまな色のテキストで y 軸にラベルを付けたいと考えています。

grid = structure(c(1:12),.Dim = c(4,3))
labs = c("A","B","C")
image(1:4,1:3,grid,axes=FALSE, xlab="", ylab = "")
#This works but isn't the colors I want
axis(2,at=1:length(labs),labels=labs,las=2, adj=1,cex.axis=0.6,col.axis="red")

これにより、次の画像が生成されます。

プロット例

ラベル A と C を黒、B を赤にしたいと思います。これは私が試したものですが、「間違った長さ」エラーが発生します...

axiscolors = c("black","red","black")
axis(2,at=1:length(labs),labels=labs,las=2, adj=1, cex.axis=0.6, col.axis=axiscolors)

これは、いくつかの「実際の」データで私が求めている効果です...

実際のヒートマップ

編集:

バックアップとして、これが ggplot2 で可能であれば、コードをリファクタリングすることをいとわないかもしれません。これを使用する他のアプリケーションもいくつかあります。

古いラベルの上に赤いシンボルのレイヤーをプロットする方法を見つけましたが、可能であれば、カラーベクトルを使用したネイティブメソッドを好むでしょう...

sublabs = c("B")
axis(2,at=match(sublabs,labs),labels=sublabs,las=2, adj=1, cex.axis=0.6, col.axis="red")

別の方法はtext()、プロット スペースの外にラベルを配置できる場合に使用することです...

text(c(1,1,1),c(1,2,3),labs,col=c("black","red","black"))

更新:以下で動作するソリューションについては、以下を参照してくださいggplot2...

4

4 に答える 4

14

や のようなベクトル化された可能性を無視するtextmtext、 を繰り返し呼び出すことでそこにたどり着くことができますaxis。時間に関するオーバーヘッドは非常に最小限に抑えられ、すべてのaxis計算を通常どおりに実行できます。例えば:

# original code
grid = structure(c(1:12),.Dim = c(4,3))
labs = c("A","B","C")
image(1:4,1:3,grid,axes=FALSE, xlab="", ylab = "")
axiscolors = c("black","red","black")

# new code    
Map(axis, side=2, at=1:3, col.axis=axiscolors, labels=labs, lwd=0, las=1)
axis(2,at=1:3,labels=FALSE)

その結果:

ここに画像の説明を入力

于 2013-09-17T03:13:38.073 に答える
5

@thelatemailの回答を最も柔軟なものとして受け入れますが、フレームの外側にプロットできるようtext()に追加すると、非常に簡単になることもわかります。xpd = TRUEを使用することもできますが、ラベルを回転させるmtext()ことはできません。

grid = structure(c(1:20),.Dim = c(4,5))
labs = c("A","B","C","D","E")
redlabs = c("B","D")
colorlist = c("black","red")
# one of many ways to generate the color labels
axiscolor = colorlist[labs %in% redlabs +1 ]

image(1:4,1:5,grid,axes=FALSE, xlab="", ylab = "")
axis(2,at=1:length(labs),labels=FALSE)

# This would work for sideways labels
# mtext(text=labs, side=2,at=1:length(labs),col=axiscolor,adj=.5)
text(labels=labs, col=axiscolor, x=rep(.45,length(labs)), y=1:length(labs), srt = 0, pos = 2, xpd = TRUE)

text() を使用したソリューション

ggplot2 の更新: と を使用theme()element_textて、色やその他のパラメーターを設定できます。このようなもの...

 p + theme(axis.text.y = element_text(color=axiscolor)) 
于 2013-09-17T14:07:20.913 に答える