将 Treemaps 与 Plotly 相结合

Combing Treemaps with Plotly

我在使用 Plotly,我想同时合并两个 Treemap。我试图用一个子图来做到这一点,但没有用。下面你可以看到代码

library(plotly)
library(dplyr)

dt=data.frame(
          types= rep("stories",10),
          kind= c('kind_1','kind_2','kind_3','kind_1','kind_2','kind_3','kind_1','kind_2','kind_3','kind_1'),
          values=seq(1:10))
        


Treemap1<-plot_ly(data = dt,
                 type= "treemap",
                 values= ~values,
                 labels= ~kind,
                 parents=  ~types,
                 domain= list(column=0),
                 name = " ",
                 textinfo="label+value+percent parent")%>%
    layout(title="Treemap1")

Treemap1

Treemap2<-plot_ly(data = dt,
                  type= "treemap",
                  values= ~values,
                  labels= ~kind,
                  parents=  ~types,
                  domain= list(column=0),
                  name = " ",
                  textinfo="label+value+percent parent")%>%
  layout(title="Treemap2")


subplot(Treemap1,Treemap2)

任何人都可以帮助我解决这个问题并将这两个 Treemap 放在同一个地块上吗?

我能想到的最好办法是添加手动标题和非继承跟踪。这实现了你的目标。我不知道为什么 subplot 很难。您可能需要调整标题之间的白色 space。我试图使用 HTML 来控制它,但它在情节上呈现了文字 HTML。

我使用了边距,因为它添加了不均匀的 right-left 边距,而且 Plotly 总是在顶部破坏标题。 (没有浪费 space 等等。)

(Treemap1 <- plot_ly(data = dt,
                     type= "treemap",
                     values= ~values,
                     labels= ~kind,
                     parents=  ~types,
                     domain= list(column=0),
                     name = " ",
                     textinfo="label+value+percent parent"))

(Treemap2 <- Treemap1 %>% 
  add_trace(inherit = F,
            data = dt,
            type= "treemap",
            values= ~values,
            labels= ~kind,
            parents=  ~types,
            domain= list(column=1),
            name = " ",
            textinfo="label+value+percent parent") %>% 
    layout(grid = list(columns = 2, rows = 1),
           title = paste0("<b style='display:inline-block;float: left;'>",
                          "Treemap 1",
                          "                                        ",
                          "Treemap 2"),
           margin = list(t = 50, l = 30, r = 30, b = 30)))