我通常使用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
...
graphics::axis
中可以被黑客攻击的任何东西。我想知道是否有可能通过网格图形来实现。我看到lattice::axis.default
有一个版本,似乎“do.labels”部分很有前途。您可能还需要修改lattice::panel.axis
。 - IRTFM?mtext
而不是?text
是正确的方法。 - thelatemaillayout
创建独立的轴标签,并将它们放置在没有轴标签的原始图表附近。但这似乎比在旧符号上绘制一层新符号更费力。也许你可以使用outer
、inset
和/或mar
将你的text
语句定位到绘图区域之外。 - Mark Miller