R中轴标签的变化颜色基于另一个变量

ber*_*roe 13 plot r ggplot2

我通常使用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")
Run Code Online (Sandbox Code Playgroud)

这会生成以下图像:

示例图

我希望标签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)
Run Code Online (Sandbox Code Playgroud)

这是我对一些"真实"数据的影响......

实际的热图

编辑:

作为备份,如果在ggplot2中可以实现这一点,我可能愿意重新考虑我的代码.我还会使用其他几个应用程序.

我想出了一种在旧标签顶部绘制一层红色符号的方法,但如果可能的话,我更喜欢带有颜色矢量的原生方法......

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

另一种方法是使用,text()如果我可以将标签放在绘图空间之外......

text(c(1,1,1),c(1,2,3),labs,col=c("black","red","black"))
Run Code Online (Sandbox Code Playgroud)

更新:请参阅下面的解决方案与ggplot2...一起使用

the*_*ail 10

如果你忽略像text和的矢量化可能性mtext,你可以通过反复调用来实现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)
Run Code Online (Sandbox Code Playgroud)

导致:

在此输入图像描述


ber*_*roe 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)
Run Code Online (Sandbox Code Playgroud)

使用 text() 的解决方案

ggplot2 更新:您可以使用theme()element_text来设置颜色和其他参数。像这样的东西...

 p + theme(axis.text.y = element_text(color=axiscolor)) 
Run Code Online (Sandbox Code Playgroud)