在R中生成高分辨率树状图

时间:2011-12-07 15:11:10

标签: r plot dendrogram

我正在尝试在R中生成高分辨率的树形图。

难点在于有超过200个叶节点,每个节点都由一个字符串标识。我想确保每个字符串标签在生成(打印)的图中都是可读的。

另一件事是我想将原始x轴(对应于叶节点)切换到y轴,并将原始y轴切换到x轴。为了更清楚的演示目的,我想在图的顶部再添加一个x轴(对​​应于切换图中的距离信息)。怎么能在R中做到这一点?

2 个答案:

答案 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可以产生巨大的图像,由用户决定大小和分辨率。有关详细信息,请参阅pngpdf的手册页(宽度,高度和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();