Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resize plotly R ggplotly

Tags:

r

plotly

I'm having some trouble using the plotly R package. I'm very new to plotly but I loved that I could use ggplot-like syntax so I'm trying to make it work.

I created a faceted plot where you can hover over a datapoint and see details about that record. I'm very happy with the plot, but I'd like to resize it so the y-axis of each plot isn't so short, as in I'd like to adjust the height and width of the overall plot.

As is, I can't figure out how to override the default sizing and I'm pulling my hair out because all of the examples I can find use plot_ly() rather than ggplotly(). I'd rather not rebuild the plot just to adjust the sizing unless I need to.

The code I'm running currently is really simple:

plot <- ggplot(data = counts_country, aes(x = Year, y = Count, color = Region, text = paste("country:", Country))) +
  geom_point(size= 2, alpha = (1/2)) + 
  facet_wrap(~ Region, ncol = 1)

(gg_plot <- ggplotly(plot))

You can see exactly what I'm working with here: http://rpubs.com/dbouquin/180894

I tried adjusting the plot to show two rows of plots but still have trouble because the year labels get smashed together. Resizing seems like all I need.

like image 288
Daina Avatar asked May 15 '16 18:05

Daina


3 Answers

Here's a workaround. Seems to work in R-Markdown documents which I am guessing is what you need? It still preserves the ggplot2 syntax but uses plotly_build() instead of ggplotly()

---
output: html_document
---

### Using ggplotly()
```{r, warning = F, message = F}
library(plotly)
library(dplyr)

gg <- mtcars %>% 
  ggplot(aes(wt, mpg, color = gear)) + 
  geom_point() + 
  facet_wrap(~hp)

ggplotly(gg)
```

### Using plotly_build()
```{r}
ggp_build <- plotly_build(gg)
ggp_build$layout$height = 800
ggp_build$layout$width = 600

ggp_build
```

Looks like so:

enter image description here

enter image description here

like image 97
royr2 Avatar answered Nov 15 '22 22:11

royr2


Just like plot_ly(), ggplotly() has a height and a width argument, see ?ggplotly.

Generally speaking it is good practice to always set height/width. If you don't, and you share your plot with someone else, the sizing might be different depending on the context.

This is especially important for ggplotly(). At print time, in order to convert the sizing of things, it has to assume a height/width. If you don't specify these, it uses the size of your R graphics device, and we can't always guarantee the resize behavior is entirely consistent with what you'd get from your R graphics device.

like image 31
Carson Avatar answered Nov 15 '22 23:11

Carson


I recommend you update to the latest version of plotly.

To see which version you're on: packageVersion("plotly")

You can then add the width and height parameters to your ggplotly() function calls.

el <- as.data.frame(economics_long[,1:3])
econp <- ggplot(el, aes(date, value, group=variable)) + 
  geom_line()+
  facet_grid(variable ~ ., scale = "free_y")+
  labs(title="US Economic time series")

ggplotly(econp, height = 350, width=600)

An extra suggestion I would add is that if you're running this in a R Markdown document / R Notebook, the figure itself may also need some adjustment so your plotly (which is really a htmlwidget) will not render with a scroller in an undersized window. This could be done with the fig.width and fig.height parameters:

enter image description here

like image 7
onlyphantom Avatar answered Nov 16 '22 00:11

onlyphantom