如何在R中绘制风扇(极)树状图?


9

我指的是这样的东西:

替代文字

用于显示解决方案的建议数据集:

data(mtcars)
plot(hclust(dist(mtcars)))

1
极坐标表示法的优点(除节省空间外)还有什么?在我看来,这看起来比较棘手。
nico 2010年

1
@nico更酷(-;

1
当您没有一根茎时,它也很有用...
Tal Galili

3
@mbq:您错过了那里的“好”双关语...您可能会说“这是更多的粉丝 ” :)
nico

Answers:


10

在系统发育学中,这是扇形系统发育图,因此您可以将其转换为phylo并使用ape

library(ape)
library(cluster) 
data(mtcars)
plot(as.phylo(hclust(dist(mtcars))),type="fan")

结果:
替代文字


(+1)我正在寻找这个,但在ape包装中找不到它!
chl

答对了。那就是我想要的。我想知道ggplot2中是否有类似的东西……
Tal Galili 2010年

@Tal在ggplot2中没有对树结构的官方支持。查看此Google组线程j.mp/c85l5l(但绝对不是循环的)。
chl 2010年

您好chl,谢谢您的链接。我也会在这里参考此代码...
Tal Galili 2010年

5

你看到这个帖子了吗?http://groups.google.com/group/ggplot2/browse_thread/thread/8e1efd0e7793c1bb

以这个例子为例,添加coord_polar()并反转轴,您会非常接近:

library(cluster) 
data(mtcars)
x <- as.phylo(hclust(dist(mtcars)))

p <- ggplot(data=x)
p <- p + geom_segment(aes(y=x,x=y,yend=xend,xend=yend), colour="blue",alpha=1) 
p <- p + geom_text(data=label.phylo(x), aes(x=y, y=x, label=label),family=3, size=3) + xlim(0, xlim) + coord_polar()

theme <- theme_update(  axis.text.x = theme_blank(),
                        axis.ticks = theme_blank(),
                        axis.title.x = theme_blank(),
                        axis.title.y = theme_blank(),
                        legend.position = "none"
                     )
p <- p + theme_set(theme)
print(p)

1
p <- ggplot(data=x)我收到此错误:ggplot2 doesn't know how to deal with data of class phylo。我想念什么?
GaBorgulya 2011年

1

四年后,我现在可以回答这个问题。可以通过组合两个新软件包来完成:circlizedendextend

可以使用circlize_dendrogram函数进行绘图(允许对plot.phylo函数的“风扇”布局进行更精细的控制)。

# install.packages("dendextend")
# install.packages("circlize")
library(dendextend)
library(circlize)

# create a dendrogram
hc <- hclust(dist(datasets::mtcars))
dend <- as.dendrogram(hc)

# modify the dendrogram to have some colors in the branches and labels
dend <- dend %>% 
   color_branches(k=4) %>% 
   color_labels

# plot the radial plot
par(mar = rep(0,4))
# circlize_dendrogram(dend, dend_track_height = 0.8) 
circlize_dendrogram(dend, labels_track_height = NA, dend_track_height = .4) 

结果是:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.