Search code examples
rggplot2plotlyggplotly

How to change width and height in ggplotly? Are there simple methods to change the width and height?


how to change width and height in ggplotly?

if we use ggplot, it can use ggsave

ggsave(filename = "foo300.png", ggplot(mtcars, aes(x=wt, y=mpg)) +
           geom_point(size=2, shape=23) + theme_bw(base_size = 10),
       width = 5, height = 4, dpi = 300, units = "in", device='png')

I am using

htmltools::browsable(gg[[i]])  

htmltools::save_html(gg[[i]],path)

OR

htmlwidgets::saveWidget(print(gg[[i]]), path)

to print graph and save HTML but the graph is too small and some words are overlapped but I want a big font, so I hope to change the size of the graph.

I know plolty that can use this to change the width and height.

library(plotly)
m <- list(
  l = 50,
  r = 50,
  b = 100,
  t = 100,
  pad = 4
)
p <- plot_ly(x = seq(0, 8), y = seq(0, 8)) %>%
  layout(autosize = F, width = 500, height = 500, margin = m)

This is my sample dataset.

d1 <-
  data.frame(col_one = c(1, 2, 3, 3),
             col_two = c("aa", "bb", "aa", "bb"))
d2 <-
  data.frame(col_one = c(1, 1, 1, 6),
             col_two = c("bb", "aa", "aa", "bb"))
d3 <-
  data.frame(col_one = c(7, 1, 1, 4),
             col_two = c("cc", "aa", "bb", "bb"))
my.list <- list(d1, d2, d3)

f <- function(table) {
  table <- mapply(function(data, count) {
    sql <-
      sqldf(
        paste0(
          "select *,count(col_one) as count from data where col_one = ",
          count,
          " group by col_one,col_two"
        )
      )
  }, my.list, 1,
  SIMPLIFY = FALSE)
  print(table)

  return (table)
}


f(table = my.list)

f2 <- function(table) {
  num <- length(table)
  chart <- vector(num, mode = "list")
  plotly <- vector(num, mode = "list")

  for (i in 1:length(table)) {
    chart[[i]] <- ggplot(data = table[[i]],
                         aes(x = col_two,
                             y = count,
                             fill = col_two)) +
      geom_bar(stat = "identity", width = 0.3)

    #print(chart[[2]])

    plotly[[i]] <- ggplotly(chart[[i]])

  }
  return(plotly)
}
f2(f(table = my.list))

save <- function (gg) {
  num <- length(gg)
  print_gg <- vector(num, mode = "list")
  dir <-   "~/test/aa"

  for (i in 1:length(gg)) {
    path <- paste0(dir, i)

    htmltools::browsable(gg[[i]])
    htmltools::save_html(gg[[i]],path)

    #htmlwidgets::saveWidget(print(gg[[i]]), path)
  }
}

save(f2(f(table = my.list)))

I have also searched this code but I just wanted to change the width and height. Must I crate widget first? Are there simple methods to change the width and height?

htmlwidgets::createWidget(
  "sigma", 
  x, 
  width = width, 
  height = height,
  sizingPolicy = htmlwidgets::sizingPolicy(
    viewer.padding = 0,
    viewer.paneHeight = 500,
    browser.fill = TRUE
  )
)

If I change ggplot to ggplotly in the graph where I should add the width or height? Are there simple methods to change the width and height?


Solution

  • I am not exactly sure this is what you want, but here is my take:

    Using your example you create a ggplot2 graphic and then turn it into a plotly object.

    gg <- ggplot(mtcars, aes(x=wt, y=mpg)) +
               geom_point(size=2, shape=23) + theme_bw(base_size = 10)
    
    g <- ggplotly(gg)
    

    To change the size of your graphic, do as you would usually do with plotly.

    m <- list(
        l = 50,
        r = 50,
        b = 100,
        t = 100,
        pad = 4
    )
    
    h <- g %>%
    layout(autosize = F, width = 500, height = 500, margin = m)
    

    and then you can save as an html document:

    htmltools::save_html(h,"index.html")