3

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

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

还有就是我想把原来的x轴(对应叶子节点)切换到y轴,把原来的y轴切换到x轴。为了更清晰的演示目的,我想在图的顶部再添加一个 x 轴(对应于切换图中的距离信息)。如何在 R 中做到这一点?

4

2 回答 2

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)

该方法提供了一个horiz可以切换X轴和Y轴的参数,测试如下:

plot(dendro, horiz=TRUE)
plot(dendro, horiz=FALSE)

管理其大小

为了便于阅读,这取决于您用于导出图像的设备。R可以产生巨大的图像,由用户设置大小和分辨率。png有关详细信息或更多详细信息,请参见手册页pdf(宽度、高度和 res 是有趣的参数)。

另一个要遵循的轨迹是图形参数:使用各种cex值,您将能够调整标签的大小。有关更多详细信息,请参见手册页par

可读性是非常以人为本的,所以我认为您不会找到一种自动获取可读绘图的自动化方法,但是通过一些手动调整,您可以使用我提到的工具来实现它。如果自动化是强制性的,可以使用parR 生成的一些元素cin来预测所需的设备宽度,但手动调整要简单得多。

新轴

axis功能可以帮助您。

于 2011-12-07T16:31:18.060 回答
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();
于 2012-06-02T12:44:44.550 回答