18

https://gist.github.com/low-decarie/5886616にあるコードを使用して、 デュアル樹状図タイル プロットを生成できます。

dual_dendogram_tile_plot(as.matrix(USAArrests), main="USA Arrests")

ここに画像の説明を入力

問題: 垂直デンドグラムをタイル プロット エリアに合わせます。(および/または水平樹状図の位置合わせを改善します)

この質問は以下に関連しています。

2 つのグラフの端を左揃え (ggplot)
ggplot2 パネル幅を指定 相関行列をグラフにプロット

4

2 に答える 2

30

より基本的なグロブを整列させる例を次に示します。

library(ggplot2)
library(grid)
library(gtable)

p <- qplot(1,1)
g <- ggplotGrob(p)

panel_id <- g$layout[g$layout$name == "panel",c("t","l")]
g <- gtable_add_cols(g, unit(1,"cm"))

g <- gtable_add_grob(g, rectGrob(gp=gpar(fill="red")),
                     t = panel_id$t, l = ncol(g))

g <- gtable_add_rows(g, unit(1,"in"), 0)
g <- gtable_add_grob(g, rectGrob(gp=gpar(fill="blue")),
                     t = 1, l = panel_id$l)

grid.newpage()
grid.draw(g)

ここに画像の説明を入力

そしてあなたのグロブと

ここに画像の説明を入力

于 2013-06-28T18:17:12.837 に答える
1

@baptiste からの回答は、gtable 構造とその変更方法をよりよく理解するのに役立ちました。以下に、(自分の) 再利用のためのコード スニペットとして、変更したバリアントのみを投稿します。

パネルの範囲を取得するために使用し、変更を に直接find_panel()パイプします。パイピングは、単一行のコメントを簡単に外して最終的なプロットへの影響を確認できるため、関数をいじるのを大幅に簡素化しました。%>%grid.drawgtable_*

library(ggplot2)
library(grid)
library(gtable)
library(dplyr)

p <- ggplot(tribble(~x,~y,~a,~b, 
                    1, 1, "a1","b1",
                    1, 1, "a2","b1",
                    1, 1, "a2","b2"), 
           aes(x=x,y=y)) + 
  geom_point() + 
  facet_grid(vars(a),vars(b))

g <- ggplotGrob(p)
panels_extent <- g %>% find_panel()
g %>%
  # Add red box to the very right, by appending a column and then filling it
  gtable_add_cols(widths = unit(1,"cm"), pos = -1) %>%
  gtable_add_grob(rectGrob(gp=gpar(fill="red")),
                  t = panels_extent$t, b = panels_extent$b,
                  l = -1, r = -1) %>%
  # Add green box to the top, by prepending a row and then filling it
  # Note the green box extends horizontally over the first panel as well 
  # as the space in between.
  gtable_add_rows(heights = unit(1,"cm"), pos = 0) %>%
  gtable_add_grob(rectGrob(gp=gpar(fill="green")),
                  t = 1, b = 1,
                  l = panels_extent$l, r = panels_extent$l+1) %>%
  {grid.newpage();grid.draw(.)}

ここに画像の説明を入力

于 2020-05-01T02:50:56.310 に答える