Подтвердить что ты не робот

Воспроизведение решеточного диаграммы дендрограммы с ggplot2

Можно ли воспроизвести этот график решетки с ggplot2?

library(latticeExtra)
data(mtcars)
x  <- t(as.matrix(scale(mtcars)))
dd.row <- as.dendrogram(hclust(dist(x)))
row.ord <- order.dendrogram(dd.row)

dd.col <- as.dendrogram(hclust(dist(t(x))))
col.ord <- order.dendrogram(dd.col)

library(lattice)

levelplot(x[row.ord, col.ord],
      aspect = "fill",
      scales = list(x = list(rot = 90)),
      colorkey = list(space = "left"),
      legend =
      list(right =
           list(fun = dendrogramGrob,
                args =
                list(x = dd.col, ord = col.ord,
                     side = "right",
                     size = 10)),
           top =
           list(fun = dendrogramGrob,
                args =
                list(x = dd.row,
                     side = "top",
                     size = 10))))

enter image description here

4b9b3361

Ответ 1

ИЗМЕНИТЬ

С 8 августа 2011 года пакет ggdendro доступен на CRAN Заметим также, что функция извлечения дендрограммы теперь называется dendro_data вместо cluster_data


Да, это так. Но пока вам придется перепрыгнуть через несколько обручей:

  • Установите пакет ggdendro (доступный из CRAN). Этот пакет будет извлекать информацию о кластере из нескольких типов кластерных методов (включая Hclust и dendrogram) с явной целью построения в ggplot.
  • Используйте сетку для создания видовых экранов и выровняйте три разных графика.

enter image description here

Код:

Сначала загрузите библиотеки и настройте данные для ggplot:

library(ggplot2)
library(reshape2)
library(ggdendro)

data(mtcars)
x <- as.matrix(scale(mtcars))
dd.col <- as.dendrogram(hclust(dist(x)))
col.ord <- order.dendrogram(dd.col)

dd.row <- as.dendrogram(hclust(dist(t(x))))
row.ord <- order.dendrogram(dd.row)

xx <- scale(mtcars)[col.ord, row.ord]
xx_names <- attr(xx, "dimnames")
df <- as.data.frame(xx)
colnames(df) <- xx_names[[2]]
df$car <- xx_names[[1]]
df$car <- with(df, factor(car, levels=car, ordered=TRUE))

mdf <- melt(df, id.vars="car")

Извлеките данные дендрограммы и создайте графики

ddata_x <- dendro_data(dd.row)
ddata_y <- dendro_data(dd.col)

### Set up a blank theme
theme_none <- theme(
  panel.grid.major = element_blank(),
  panel.grid.minor = element_blank(),
  panel.background = element_blank(),
  axis.title.x = element_text(colour=NA),
  axis.title.y = element_blank(),
  axis.text.x = element_blank(),
  axis.text.y = element_blank(),
  axis.line = element_blank()
  #axis.ticks.length = element_blank()
)

### Create plot components ###    
# Heatmap
p1 <- ggplot(mdf, aes(x=variable, y=car)) + 
  geom_tile(aes(fill=value)) + scale_fill_gradient2()

# Dendrogram 1
p2 <- ggplot(segment(ddata_x)) + 
  geom_segment(aes(x=x, y=y, xend=xend, yend=yend)) + 
  theme_none + theme(axis.title.x=element_blank())

# Dendrogram 2
p3 <- ggplot(segment(ddata_y)) + 
  geom_segment(aes(x=x, y=y, xend=xend, yend=yend)) + 
  coord_flip() + theme_none

Используйте графику сетки и некоторое ручное выравнивание для размещения трех графиков на странице

### Draw graphic ###

grid.newpage()
print(p1, vp=viewport(0.8, 0.8, x=0.4, y=0.4))
print(p2, vp=viewport(0.52, 0.2, x=0.45, y=0.9))
print(p3, vp=viewport(0.2, 0.8, x=0.9, y=0.4))

Ответ 2

Как говорит Бен, все возможно. Проделана определенная работа по поддержке дендрограмм. Andrie de Vries сделал fortify метод древовидных объектов. Тем не менее, итоговая графика не так хороша, как вы можете видеть.

Плитка будет легко сделать. Для дендрограммы я проверил plot.dendrogram (используя getAnywhere), чтобы посмотреть, как рассчитываются координаты для сегментов. Извлеките эти координаты и используйте geom_segment для построения дендрограммы. Затем используйте видовые экраны для построения плиток и дендрограммы вместе. Извините, я не могу привести пример, это большая работа, и это слишком поздно.

Я надеюсь, что это поможет

Приветствия

dendrogram

Ответ 3

Сомнительные. Я не вижу никаких функций в Index для ggplot2, которые предполагали бы поддержку дендрограмм, и когда этот блоггер собрал множество переводов иллюстраций в книге Саркара Решетки, он не смог получить легенду дендрограммы ggplot:

http://learnr.wordpress.com/2009/08/10/ggplot2-version-of-figures-in-lattice-multivariate-data-visualization-with-r-part-9/