plotly / plotly.R

An interactive graphing library for R
https://plotly-r.com
Other
2.55k stars 625 forks source link

Long legend with horizontal orientation got truncated when converting ggplot object using ggplotly but it's fine when using plot_ly #848

Open hoholee opened 7 years ago

hoholee commented 7 years ago

Hi all, as a work-around approah to display a very long multi-column legend, I tried to use the layout(legend = list(orientation = "h")).

Here is the data_frame I was working with: image

When I first built a ggplot object and then used ggplotly to convert it, I got this: p <- ggplot(df, aes_string("cluster", "mCH", fill="cluster")) p <- p + geom_boxplot() + scale_fill_manual(values = colors2, name="Cluster") + theme_bw() + ggtitle("someGene") p.ggplotly <- p %>% ggplotly(tooltip = c("cluster", "mCH", "density")) %>% layout(legend = list(orientation = "h")) p.ggplotly

image

The legend had only one row and it just got out of the margin... But when I did a similar thing using plot_ly the legend was fine:

p.plotly <- plot_ly(df,x=~cluster, y=~mCH,type="box", color=~cluster, colors=colors2) %>% layout(legend=list(orientation = "h")) p.plotly image

And I thought this is somehow control by the layout, so I tried copying the layout from p.plotly to p.ggplotly: p.ggplotly.bak <- p.ggplotly p.ggplotly$x$layout <- p.plotly$x$layout But the legend was still truncated... p.ggplotly image

However if I did it the other way around, I got a something like this: p.plotly$x$layout <- p.ggplotly.bak$x$layout p.plotly

image

The legend was displayed correctly with multiple rows(even though the position was not right, but I know how to adjust for that).

I'm not sure if this is because the ggplotly and plot_ly is inherently different, or there're other options that can controll this behavior (or this is just a bug?). Any idea? I somehow prefer to use ggplotly...

FYI, ggplot2 version is 2.2.1 and plotly version is 4.5.6.9000. Thanks!

ck37 commented 7 years ago

I am also running into this problem with ggplotly :/ Guess I need to convert everything to directly use plot_ly().

Update: using plot_ly() directly doesn't work for me either, because I need to display ellipses and that can only be done with ggplot + ggplotly :( So frustrating.