我正在尝试在R中生成高分辨率的树形图。
难点在于有超过200个叶节点,每个节点都由一个字符串标识。我想确保每个字符串标签在生成(打印)的图中都是可读的。
另一件事是我想将原始x轴(对应于叶节点)切换到y轴,并将原始y轴切换到x轴。为了更清楚的演示目的,我想在图的顶部再添加一个x轴(对应于切换图中的距离信息)。怎么能在R中做到这一点?
答案 0 :(得分:5)
您可以使用标准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)
此方法提供可以切换X和Y轴的horiz
参数,测试以下内容:
plot(dendro, horiz=TRUE)
plot(dendro, horiz=FALSE)
为了便于阅读,由您用于导出图像的设备决定。 R可以产生巨大的图像,由用户决定大小和分辨率。有关详细信息,请参阅png
或pdf
的手册页(宽度,高度和res是有趣的参数)。
要遵循的其他跟踪是图形参数:使用各种cex
值,您将能够调整标签的大小。有关详细信息,请参阅par
的手册页。
可读性非常注重人性化,因此我认为您不会找到自动获取可读图表的自动化方法,但通过一些手动调整,您可以使用我提到的工具实现它。如果自动化是强制性的,可以使用R生成的par
元素来获取cin
来预测所需的设备宽度,但手动调整它会更简单。
axis
功能可以帮助您。
答案 1 :(得分:1)
我花了一段时间才得到这个:
# 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();