我正在尝试在 R 中生成高分辨率树状图。
难点在于叶子节点有200多个,每个节点都用一个字符串来标识。我想确保这些字符串标签中的每一个在生成的(打印的)图中都是可读的。
还有就是我想把原来的x轴(对应叶子节点)切换到y轴,把原来的y轴切换到x轴。为了更清晰的演示目的,我想在图的顶部再添加一个 x 轴(对应于切换图中的距离信息)。如何在 R 中做到这一点?
我正在尝试在 R 中生成高分辨率树状图。
难点在于叶子节点有200多个,每个节点都用一个字符串来标识。我想确保这些字符串标签中的每一个在生成的(打印的)图中都是可读的。
还有就是我想把原来的x轴(对应叶子节点)切换到y轴,把原来的y轴切换到x轴。为了更清晰的演示目的,我想在图的顶部再添加一个 x 轴(对应于切换图中的距离信息)。如何在 R 中做到这一点?
您可以使用标准 R 函数来实现这一点。
要从距离矩阵绘制树状图,您可以使用该hclust
函数。有关可用算法的更多详细信息,请参见其手册页。
# To produce a dummy distance matrix
distMatrix <- dist(matrix(1:9, ncol=3))
# To convert it into a tree
tree <- hclust(distMatrix)
对于绘图,dendrogram
该类提供了一个有用的plot
方法。只需将 hclust 输出转换为树状图并绘制它:
dendro <- as.dendrogram(tree)
该方法提供了一个horiz
可以切换X轴和Y轴的参数,测试如下:
plot(dendro, horiz=TRUE)
plot(dendro, horiz=FALSE)
为了便于阅读,这取决于您用于导出图像的设备。R可以产生巨大的图像,由用户设置大小和分辨率。png
有关详细信息或更多详细信息,请参见手册页pdf
(宽度、高度和 res 是有趣的参数)。
另一个要遵循的轨迹是图形参数:使用各种cex
值,您将能够调整标签的大小。有关更多详细信息,请参见手册页par
。
可读性是非常以人为本的,所以我认为您不会找到一种自动获取可读绘图的自动化方法,但是通过一些手动调整,您可以使用我提到的工具来实现它。如果自动化是强制性的,可以使用par
R 生成的一些元素cin
来预测所需的设备宽度,但手动调整要简单得多。
该axis
功能可以帮助您。
我花了一段时间才得到这个:
# get font factor
pdf(); ff<-72/par()$ps; dev.off();
# if there are more than 20 entries
if (dim(x)[2] > 20) {
# scale output by font size
pdf(fout, height=dim(x)[2]/ff)
} else {
pdf(fout)
}
# increase right margin width
op <- par(mar = par("mar") + c(0,0,0,2*max(nchar(colnames(x)))/ff))
# plot horizontally
plot(as.dendrogram(hclust(distance), hang=-1), main="Dissimilarity = 1 - Correlation", xlab="", horiz=T)
# restore margin
par(op)
dev.off();